O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

nl::Weave::TLV::TLVUpdater

#include <src/lib/core/WeaveTLV.h>

Fornece uma interface unificada do leitor/escritor para editar/adicionar/excluir elementos na codificação TLV.

Resumo

O TLVUpdater é uma união dos objetos TLVReader e TLVWriter e oferece métodos de interface para editar/excluir dados em uma codificação, bem como adicionar novos elementos à codificação TLV. O objeto TLVUpdater atua basicamente como dois cursores, um para ler a codificação atual e outro para a gravação (para copiar dados atuais ou gravar novos dados).

Semanticamente, o objeto TLVUpdater funciona como uma união do TLVReader e TLVWriter. Os métodos TLVUpdater têm significados mais ou menos semelhantes como colegas com nomes semelhantes em TLVReader/TLVWriter. Quando houver diferenças na semântica, elas serão documentadas claramente na seção de comentários da função em WeaveTLVUpdater.cpp.

Uma observação importante sobre os métodos TLVUpdater's PutBytes() e PutString() é que eles podem deixar a codificação em estado corrompido, com somente o cabeçalho do elemento escrito quando ocorre um estouro. Os aplicativos podem chamar GetPersistentFreeLength() para garantir que haja aproximadamente espaço suficiente para escrever a codificação. Observe GetGetFreeLength() informa apenas os bytes sem custo financeiro disponíveis e não há como o aplicativo saber o tamanho dos dados codificados que são gravados. No caso de um estouro excessivo, PutBytes() e PutString() retornarão WEAVE_ERROR_BUFFER_TOO_SMALL para o autor da chamada.

Além disso, o método Next() está sobrecarregado para pular o elemento atual e avançar o leitor interno para o próximo elemento. Como pular elementos já codificados precisa exigir a alteração das variáveis internas de estado de espaço livre do gravador interno para considerar o novo espaço liberado (disponível ao pular), o aplicativo precisa chamar Next() no atualizador após um método Get() com um valor que não quer gravar de volta (o que é equivalente a ignorar o elemento atual).

Funções públicas

CopyElement(TLVReader & reader)
CopyElement(uint64_t tag, TLVReader & reader)
DupBytes(uint8_t *& buf, uint32_t & dataLen)
DupString(char *& buf)
EndContainer(TLVType outerContainerType)
EnterContainer(TLVType & outerContainerType)
Prepara um objeto TLVUpdater para ler elementos de um contêiner.
ExitContainer(TLVType outerContainerType)
Conclua a leitura de um elemento de contêiner TLV e codifica um fim do elemento TLV no TLV de saída.
Finalize(void)
Get(bool & v)
Get(int8_t & v)
Get(int16_t & v)
Get(int32_t & v)
Get(int64_t & v)
Get(uint8_t & v)
Get(uint16_t & v)
Get(uint32_t & v)
Get(uint64_t & v)
Get(float & v)
Get(double & v)
GetBytes(uint8_t *buf, uint32_t bufSize)
GetContainerType(void) const
GetDataPtr(const uint8_t *& data)
GetImplicitProfileId(void)
uint32_t
GetLength(void) const
uint32_t
GetLengthRead(void) const
uint32_t
GetLengthWritten(void)
uint32_t
GetReader(TLVReader & containerReader)
void
GetRemainingFreeLength(void)
uint32_t
GetRemainingLength(void) const
uint32_t
GetString(char *buf, uint32_t bufSize)
GetTag(void) const
uint64_t
GetType(void) const
Init(uint8_t *buf, uint32_t dataLen, uint32_t maxLen)
Inicialize um objeto TLVUpdater para editar um único buffer de entrada.
Init(TLVReader & aReader, uint32_t freeLen)
Inicialize um objeto TLVUpdater usando um TLVReader.
Move(void)
Copia o elemento atual da TLV de entrada para a TLV de saída.
MoveUntilEnd(void)
void
Move tudo do ponto de leitura atual do TLVUpdater' até o fim do buffer de TLV de entrada para a saída.
Next(void)
Pule o elemento atual e avance o objeto TLVUpdater para o próximo elemento no TLV de entrada.
Put(uint64_t tag, int8_t v)
Put(uint64_t tag, int16_t v)
Put(uint64_t tag, int32_t v)
Put(uint64_t tag, int64_t v)
Put(uint64_t tag, uint8_t v)
Put(uint64_t tag, uint16_t v)
Put(uint64_t tag, uint32_t v)
Put(uint64_t tag, uint64_t v)
Put(uint64_t tag, int8_t v, bool preserveSize)
Put(uint64_t tag, int16_t v, bool preserveSize)
Put(uint64_t tag, int32_t v, bool preserveSize)
Put(uint64_t tag, int64_t v, bool preserveSize)
Put(uint64_t tag, uint8_t v, bool preserveSize)
Put(uint64_t tag, uint16_t v, bool preserveSize)
Put(uint64_t tag, uint32_t v, bool preserveSize)
Put(uint64_t tag, uint64_t v, bool preserveSize)
Put(uint64_t tag, float v)
Put(uint64_t tag, double v)
PutBoolean(uint64_t tag, bool v)
PutBytes(uint64_t tag, const uint8_t *buf, uint32_t len)
PutNull(uint64_t tag)
PutString(uint64_t tag, const char *buf)
PutString(uint64_t tag, const char *buf, uint32_t len)
SetImplicitProfileId(uint32_t profileId)
void
Defina o ID do perfil implícito para o objeto TLVUpdater.
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
VerifyEndOfContainer(void)

Funções públicas

Copiar

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Copiar

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

Bytes duplos

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

String DupString

WEAVE_ERROR DupString(
  char *& buf
)

Contêiner final

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Inserir contêiner

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Prepara um objeto TLVUpdater para ler elementos de um contêiner.

Ele também codifica um início de objeto de contêiner no TLV de saída.

O método EnterContainer() prepara o objeto TLVUpdater atual para começar a ler os elementos do membro de um contêiner TLV (uma estrutura, matriz ou caminho). Para cada chamada para EnterContainer(), os aplicativos precisam fazer uma chamada correspondente para ExitContainer().

Quando EnterContainer() é chamado, o leitor de TLVUpdater's precisa ser posicionado no elemento do contêiner. O método usa como argumento uma referência a um valor de TLVType que será usado para salvar o contexto do atualizador enquanto estiver lendo o contêiner.

Quando o método EnterContainer() retorna, o atualizador é posicionado imediatamente antes do primeiro membro do contêiner. Chamar Next() repetidamente repetirá o atualizador com os membros da coleção até que o fim seja atingido, quando o atualizador retornará WEAVE_END_OF_TLV.

Depois que o aplicativo terminar de ler um contêiner, ele poderá continuar lendo os elementos após o contêiner chamando o método ExitContainer().

Detalhes
Parâmetros
[out] outerContainerType
Uma referência a um valor TLVType que receberá o contexto do atualizador.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INCORRECT_STATE
Se o leitor TLVUpdater não estiver posicionado em um elemento do contêiner.
other
Qualquer outro código de erro do Weave ou da plataforma retornado por TLVWriter::StartContainer() ou TLVReader::EnterContainer().

Sair do Container

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Conclua a leitura de um elemento de contêiner TLV e codifica um fim do elemento TLV no TLV de saída.

O método ExitContainer() restaura o estado de um objeto TLVUpdater após uma chamada para EnterContainer(). Para cada chamada para aplicativos EnterContainer(), é necessário fazer uma chamada correspondente para ExitContainer(), transmitindo o valor de contexto retornado pelo método EnterContainer().

Quando ExitContainer() retorna, o leitor TLVUpdater é posicionado imediatamente antes do primeiro elemento que acompanha o contêiner no TLV de entrada. A partir desse ponto, os aplicativos podem chamar Next() para avançar com os elementos restantes.

Depois que EnterContainer() for chamado, os aplicativos poderão chamar ExitContainer() no atualizador a qualquer momento, independentemente de todos os elementos no contêiner subjacente terem sido lidos. Além disso, chamar ExitContainer() antes de ler todos os elementos no contêiner fará com que ele seja truncado no TLV de saída.

Detalhes
Parâmetros
[in] outerContainerType
O valor de TLVType que foi retornado pelo método EnterContainer().
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_TLV_UNDERRUN
Se a codificação TLV subjacente terminou prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o atualizador encontrou um tipo de elemento TLV inválido ou incompatível.
WEAVE_ERROR_INVALID_TLV_TAG
Se o atualizador encontrou uma tag TLV em um contexto inválido.
other
Qualquer outro código de erro do Weave ou da plataforma retornado por TLVWriter::EndContainer() ou TLVReader::ExitContainer().

Finalizar

WEAVE_ERROR Finalize(
  void
)

Get

WEAVE_ERROR Get(
  bool & v
)

Get

WEAVE_ERROR Get(
  int8_t & v
)

Get

WEAVE_ERROR Get(
  int16_t & v
)

Get

WEAVE_ERROR Get(
  int32_t & v
)

Get

WEAVE_ERROR Get(
  int64_t & v
)

Get

WEAVE_ERROR Get(
  uint8_t & v
)

Get

WEAVE_ERROR Get(
  uint16_t & v
)

Get

WEAVE_ERROR Get(
  uint32_t & v
)

Get

WEAVE_ERROR Get(
  uint64_t & v
)

Get

WEAVE_ERROR Get(
  float & v
)

Get

WEAVE_ERROR Get(
  double & v
)

GetBytes

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

GetContainerType

TLVType GetContainerType(
  void
) const 

GetDataPtr

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

GetImplicitProfileId

uint32_t GetImplicitProfileId(
  void
)

GetLength

uint32_t GetLength(
  void
) const 

GetLengthRead

uint32_t GetLengthRead(
  void
) const 

GetLengthWritten

uint32_t GetLengthWritten(
  void
)

GetReader

void GetReader(
  TLVReader & containerReader
)

GetrestFreeLength

uint32_t GetRemainingFreeLength(
  void
)

Get solicitarLength

uint32_t GetRemainingLength(
  void
) const 

GetString

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

GetTag

uint64_t GetTag(
  void
) const 

GetType

TLVType GetType(
  void
) const 

Init

WEAVE_ERROR Init(
  uint8_t *buf,
  uint32_t dataLen,
  uint32_t maxLen
)

Inicialize um objeto TLVUpdater para editar um único buffer de entrada.

Ao chamar esse método, os dados TLV no buffer são movidos para o fim do buffer e um objeto TLVReader particular é inicializado neste buffer realocado. Um objeto TLVWriter particular também é inicializado no espaço livre, que agora está disponível no início. Os aplicativos podem usar o objeto TLVUpdater para analisar os dados TLV e modificar/excluir elementos existentes ou adicionar novos elementos à codificação.

Detalhes
Parâmetros
[in] buf
Um ponteiro para um buffer que contém os dados de TLV a serem editados.
[in] dataLen
É a duração dos dados de TLV no buffer.
[in] maxLen
É o comprimento total do buffer.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INVALID_ARGUMENT
Se o endereço do buffer for inválido.
WEAVE_ERROR_BUFFER_TOO_SMALL
Se o buffer for muito pequeno.

Init

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Inicialize um objeto TLVUpdater usando um TLVReader.

Ao chamar esse método, os dados TLV no buffer apontados pelo TLVReader são movidos do ponto de leitura atual para o fim do buffer. Um novo objeto TLVReader particular é inicializado para ler nesse novo local, e um novo objeto particular TLVWriter é inicializado para gravar no espaço do buffer liberado.

Se o TLVReader já estiver posicionado "on" um elemento, ele terá o backup feito no início desse elemento. Além disso, esse backup funciona bem com elementos de contêiner, ou seja, se o TLVReader já foi usado para chamar EnterContainer(), não há nada para retroceder. Mas se o TLVReader ainda estava posicionado no elemento do contêiner e EnterContainer() ainda não foi chamado, o objeto TLVReader é salvo no início do cabeçalho do contêiner.

O objeto TLVReader de entrada será destruído antes de retornar, e o aplicativo não poderá usar o mesmo ao retornar.

Detalhes
Parâmetros
[in,out] aReader
Referência a um objeto TLVReader que será destruído antes de retornar.
[in] freeLen
O espaço de espaço livre (em bytes) disponível no buffer de dados pré-codificado.
Valores de retorno
WEAVE_NO_ERROR
Se o método for bem-sucedido.
WEAVE_ERROR_INVALID_ARGUMENT
Se o endereço do buffer for inválido.
WEAVE_ERROR_NOT_IMPLEMENTED
Se o leitor foi inicializado em uma cadeia de buffers.

Mover

WEAVE_ERROR Move(
  void
)

Copia o elemento atual da TLV de entrada para a TLV de saída.

O método Move() copia o elemento atual em que o leitor de TLVUpdater's é posicionado para o gravador do TLVUpdater' O aplicativo deve chamar Next() e posicionar o leitor do TLVUpdater's em um elemento antes de chamar esse método. Assim como o método TLVReader::Next(), se o leitor for posicionado em um elemento do contêiner no momento da chamada, todos os membros do contêiner serão copiados. Se o leitor não estiver posicionado em nenhum elemento, nada mudará ao chamar esse método.

Detalhes
Valores de retorno
WEAVE_NO_ERROR
Se o leitor TLVUpdater foi posicionado em um novo elemento.
WEAVE_END_OF_TLV
Se o leitor de TLVUpdater's apontar para o fim do contêiner.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Se o leitor de TLVIpdater's não estiver posicionado em um elemento TLV válido.
other
Retorna outros códigos de erro retornados pelo método TLVReader::Skip().

MoverUntilEnd

void MoveUntilEnd(
  void
)

Move tudo do ponto de leitura atual do TLVUpdater' até o fim do buffer de TLV de entrada para a saída.

Esse método oferece suporte à mudança de tudo do ponto de leitura atual do TLVUpdater' até o final do buffer do leitor para o gravador do TLVUpdater'

Próxima

WEAVE_ERROR Next(
  void
)

Pule o elemento atual e avance o objeto TLVUpdater para o próximo elemento no TLV de entrada.

O método Next() pula o elemento atual no TLV de entrada e avança o leitor de TLVUpdater's para o próximo elemento que reside no mesmo contexto de contenção. Se o leitor estiver posicionado no nível mais externo de uma codificação TLV, chamar Next() a avançará para o próximo elemento superior. Se o leitor for posicionado em um elemento do contêiner de TLV (uma estrutura, uma matriz ou um caminho), chamar Next() o avançará para o próximo elemento de membro do contêiner.

Como Next() restringe o movimento do leitor ao contexto de contenção atual, chamar Next() quando o leitor é posicionado em um elemento do contêiner avança no contêiner, ignorando os elementos (e membros de contêineres aninhados) até que chegue ao primeiro elemento após o contêiner.

Quando não há mais elementos em um contexto de contenção específico, o método Next() retorna um erro WEAVE_END_OF_TLV e a posição do leitor permanece inalterada.

Detalhes
Valores de retorno
WEAVE_NO_ERROR
Se o leitor TLVUpdater foi posicionado em um novo elemento.
other
Retorna os códigos de erro do Weave ou da plataforma retornados pelos métodos TLVReader::Skip() e TLVReader::Next().

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Put

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

PutBoolean

WEAVE_ERROR PutBoolean(
  uint64_t tag,
  bool v
)

PutBytes

WEAVE_ERROR PutBytes(
  uint64_t tag,
  const uint8_t *buf,
  uint32_t len
)

PutNull

WEAVE_ERROR PutNull(
  uint64_t tag
)

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

PutString

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

SetImplicitProfileId

void SetImplicitProfileId(
  uint32_t profileId
)

Defina o ID do perfil implícito para o objeto TLVUpdater.

Esse método define o ID de perfil implícito para o objeto TLVUpdater. Quando o atualizador precisa codificar um novo elemento, se o ID do perfil da tag associada ao novo elemento corresponder ao valor de profileId, o atualizador codificará a tag na forma implícita, omitindo, assim, o ID do perfil no processo.

Detalhes
Parâmetros
[in] profileId
O ID do perfil de tags que devem ser codificadas em um formulário implícito.

Iniciar contêiner

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

VerificarfimDoContêiner

WEAVE_ERROR VerifyEndOfContainer(
  void
)