En Google, luchamos por la equidad racial de la comunidad negra. Más información

nl :: Tejido:: TLV :: TLVUpdater

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

Proporciona una interfaz de lectura / escritura unificada para editar / añadir / borrar elementos en TLV codificación.

Resumen

El TLVUpdater es una unión de laTLVReader yTLVWriter objetos y proporciona métodos de interfaz para editar / borrar datos en una codificación, así como la adición de nuevos elementos a la TLV de codificación. El TLVUpdater objeto actúa esencialmente como dos cursores, uno para la lectura de la codificación existente y otra para la escritura (ya sea para la copia de los datos existentes sobre o escribir nuevos datos).

Semánticamente, los TLVUpdater funciones objeto como una unión de laTLVReader yTLVWriter . Los TLVUpdater métodos tienen significados más o menos similares a las contrapartes con nombres similares en TLVReader / TLVWriter. Donde hay diferencias en la semántica, las diferencias están claramente documentados en la sección de comentarios de la función en WeaveTLVUpdater.cpp .

Una nota particularmente importante acerca de la TLVUpdater PutBytes 's () y PutString () métodos es que puede salir de la codificación en un estado corrupto con sólo el encabezado del elemento escrito cuando se produce un desbordamiento. Las aplicaciones se llaman GetRemainingFreeLength () para asegurarse de que es aproximadamente suficiente espacio libre para escribir la codificación. Tenga en cuenta que GetRemainingFreeLength () sólo le dice a los bytes libres disponibles y no hay manera para que la aplicación conozca la longitud de los datos codificados que se escribe. En caso de desbordamiento, tanto PutBytes () como PutString () devolverán WEAVE_ERROR_BUFFER_TOO_SMALL a la persona que llama.

Asimismo, cabe destacar que en Siguiente () método está sobrecargado tanto omitir el elemento actual y también avanzar en el lector interno al siguiente elemento. Debido a saltar elementos ya codificados requiere el cambio de variables libres espacio estado del escritor interno para tener en cuenta el nuevo espacio liberado (puestos a disposición por saltarse), se espera que la aplicación llame siguiente () en el programa de actualización después de un método Get () cuyo valor doesn no deseo volver a escribir (lo que equivale a omitir el elemento actual).

Funciones publicas

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 una TLVUpdater objeto para elementos de un contenedor de lectura.
ExitContainer ( TLVType outerContainerType)
Completa la lectura de un TLV elemento contenedor y codifica un extremo de TLV elemento en la salida TLV .
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)
Inicialice un TLVUpdater objeto a editar una única memoria intermedia de entrada.
Init (TLVReader & aReader, uint32_t freeLen)
Inicialice un TLVUpdater objeto utilizando unTLVReader .
Move (void)
Copias el elemento actual de la entrada TLV a la salida TLV .
MoveUntilEnd (void)
void
Mover todo, desde la TLVUpdater punto de lectura actual 's hasta el final de la entrada TLV tampón durante la salida.
Next (void)
Saltar el elemento actual y avanzar en la TLVUpdater objeto al siguiente elemento en la entrada de TLV .
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
Establecer el ID del perfil implícito para el TLVUpdater objeto.
StartContainer (uint64_t tag, TLVType containerType, TLVType & outerContainerType)
VerifyEndOfContainer (void)

Funciones publicas

CopyElement

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

CopyElement

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

DupBytes

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

DupString

WEAVE_ERROR DupString(
  char *& buf
)

EndContainer

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

Entrar Contenedor

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

Prepara una TLVUpdater objeto para elementos de un contenedor de lectura.

También codifica un inicio de objeto contenedor en la salida del TLV .

El EnterContainer () método se prepara la corriente TLVUpdater objeto de comenzar la lectura de los elementos de miembro de un TLV recipiente (una estructura, matriz o PATH). Para cada llamada a EnterContainer () aplicaciones deben hacer una llamada correspondiente a ExitContainer () .

Cuando EnterContainer () se llama la TLVUpdater 's lector debe ser posicionado en el elemento contenedor. El método toma como argumento una referencia a un valor TLVType que se utilizará para guardar el contexto del actualizador mientras lee el contenedor.

Cuando los EnterContainer () devuelve el método, el actualizador se coloca inmediatamente antes de la primera miembro del recipiente. En varias ocasiones llamando siguiente () hará avanzar el programa de actualización a través de los miembros de la colección hasta que se alcanza el final, momento en el que el programa de actualización volverá WEAVE_END_OF_TLV.

Una vez que la aplicación ha terminado de leer un recipiente que puede seguir leyendo los elementos después de que el contenedor llamando a la ExitContainer () método.

Detalles
Parámetros
[out] outerContainerType
Una referencia a un valor TLVType que recibirá el contexto del actualizador.
Valores devueltos
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INCORRECT_STATE
Si el TLVUpdater lector no está posicionado en un elemento contenedor.
other
Cualquier otro código de la armadura o la plataforma de error devuelto por TLVWriter :: StartContainer () o TLVReader :: EnterContainer () .

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Completa la lectura de un TLV elemento contenedor y codifica un extremo de TLV elemento en la salida TLV .

El ExitContainer () método restaura el estado de un TLVUpdater objeto después de una llamada a EnterContainer () . Para cada llamada a EnterContainer () aplicaciones deben hacer una llamada correspondiente a ExitContainer () , pasando el valor devuelto por el contexto EnterContainer () método.

Cuando ExitContainer () devoluciones, el TLVUpdater lector se coloca inmediatamente antes del primer elemento que sigue el envase en la entrada de TLV . A partir de este punto las aplicaciones pueden llamar siguiente () para avanzar por los elementos restantes.

Una vez EnterContainer () ha sido llamado, las aplicaciones pueden llamar ExitContainer () en el programa de actualización en cualquier punto en el tiempo, independientemente de si todos los elementos en el contenedor subyacente han sido leídos. Asimismo, cabe destacar que llamar ExitContainer () antes de leer todos los elementos en el contenedor, se traducirá en el contenedor actualizado quedan truncados en la salida del TLV .

Detalles
Parámetros
[in] outerContainerType
El valor TLVType que fue devuelto por el EnterContainer () método.
Valores devueltos
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_TLV_UNDERRUN
Si el subyacente TLV codifican terminó prematuramente.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el programa de actualización se encontró con un inválido o no soportado TLV tipo de elemento.
WEAVE_ERROR_INVALID_TLV_TAG
Si el programa de actualización se encontró con un TLV de etiqueta en un contexto no válido.
other
Cualquier otro código de la armadura o la plataforma de error devuelto por TLVWriter :: EndContainer () o TLVReader :: ExitContainer () .

Finalizar

WEAVE_ERROR Finalize(
  void
)

Obtener

WEAVE_ERROR Get(
  bool & v
)

Obtener

WEAVE_ERROR Get(
  int8_t & v
)

Obtener

WEAVE_ERROR Get(
  int16_t & v
)

Obtener

WEAVE_ERROR Get(
  int32_t & v
)

Obtener

WEAVE_ERROR Get(
  int64_t & v
)

Obtener

WEAVE_ERROR Get(
  uint8_t & v
)

Obtener

WEAVE_ERROR Get(
  uint16_t & v
)

Obtener

WEAVE_ERROR Get(
  uint32_t & v
)

Obtener

WEAVE_ERROR Get(
  uint64_t & v
)

Obtener

WEAVE_ERROR Get(
  float & v
)

Obtener

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
)

GetRemainingFreeLength

uint32_t GetRemainingFreeLength(
  void
)

GetRemainingLength

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 

En eso

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

Inicialice un TLVUpdater objeto a editar una única memoria intermedia de entrada.

Al llamar a este método, el TLV de datos en el búfer se mueve a la final del búfer y una privadaTLVReader objeto se inicializa en este memoria intermedia reubicado. Una organización privadaTLVWriter objeto también se inicializa en el espacio libre que está disponible ahora en el comienzo. Las aplicaciones pueden utilizar la TLVUpdater objeto de analizar los TLV de datos y modificar / eliminar elementos existentes o añadir nuevos elementos a la codificación.

Detalles
Parámetros
[in] buf
Un puntero a un tampón que contiene los TLV de datos a ser editado.
[in] dataLen
La longitud de los TLV de datos en el búfer.
[in] maxLen
La longitud total del búfer.
Valores devueltos
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INVALID_ARGUMENT
Si la dirección del búfer no es válida.
WEAVE_ERROR_BUFFER_TOO_SMALL
Si el búfer es demasiado pequeño.

En eso

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Inicialice un TLVUpdater objeto utilizando unTLVReader .

Al llamar a este método, TLV datos en el buffer apuntado por elTLVReader se mueve desde el punto de lectura actual hasta el final de la memoria intermedia. Un nuevo privadaTLVReader objeto es inicializado para leer desde esta nueva ubicación, mientras que un nuevo privadaTLVWriter objeto se inicializa escribir en el espacio de amortiguación liberado.

Tenga en cuenta que si elTLVReader ya está posicionada "en" un elemento, primero es retraída al inicio de ese elemento. Tenga en cuenta también que este respaldo fuera funciona bien con elementos de recipiente, es decir, si elTLVReader ya se utiliza para llamar EnterContainer () , entonces no hay nada que back-off. Pero si elTLVReader se posicionó en el elemento contenedor y EnterContainer () todavía no se llamaba, entonces elTLVReader objeto está respaldado-off para el inicio de la cabeza del recipiente.

La entradaTLVReader objeto será destruido antes de regresar y la aplicación no debe hacer uso de la misma en la declaración.

Detalles
Parámetros
[in,out] aReader
La referencia a unTLVReader objeto que será destruido antes de regresar.
[in] freeLen
La longitud de espacio libre (en bytes) disponible en el búfer de datos precodificados.
Valores devueltos
WEAVE_NO_ERROR
Si el método tuvo éxito.
WEAVE_ERROR_INVALID_ARGUMENT
Si la dirección del búfer no es válida.
WEAVE_ERROR_NOT_IMPLEMENTED
Si el lector se inicializó en una cadena de búferes.

Moverse

WEAVE_ERROR Move(
  void
)

Copias el elemento actual de la entrada TLV a la salida TLV .

Los Move () método copia el elemento actual en la que el TLVUpdater 'se coloca en el lector s, a la TLVUpdater ' escritor s. La aplicación debe llamar Siguiente () y la posición del TLVUpdater lector 's en un elemento antes de llamar a este método. Al igual que el TLVReader :: Next () método, si el lector se coloca en un elemento contenedor en el momento de la llamada, todos los miembros del contenedor se copiarán. Si el lector no se posiciona sobre ningún elemento, nada cambia al llamar a este método.

Detalles
Valores devueltos
WEAVE_NO_ERROR
Si el TLVUpdater lector se posicionó con éxito en un nuevo elemento.
WEAVE_END_OF_TLV
Si el TLVUpdater lector 's está apuntando al final del contenedor.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Si el lector del TLVIpdater no está colocado en una válida TLV elemento.
other
Devuelve otros códigos de error devueltos por TLVReader :: Skip () método.

MoveUntilEnd

void MoveUntilEnd(
  void
)

Mover todo, desde la TLVUpdater punto de lectura actual 's hasta el final de la entrada TLV tampón durante la salida.

Este método soportes móviles de todo, desde la TLVUpdater 'actual punto de lectura s hasta el fin de amortiguar el lector a la TLVUpdater ' s escritor.

próximo

WEAVE_ERROR Next(
  void
)

Saltar el elemento actual y avanzar en la TLVUpdater objeto al siguiente elemento en la entrada de TLV .

La siguiente () método salta el elemento actual de la entrada TLV y avanza el TLVUpdater lector 's al siguiente elemento que reside en el mismo contexto de contención. En particular, si el lector está colocado en el exterior más nivel de un TLV de codificación, llamando Siguiente () avanzará a la siguiente, la parte superior más elemento. Si el lector está posicionado dentro de un TLV elemento contenedor (una estructura, matriz o ruta), llamando Siguiente () hará avanzar al siguiente elemento de miembro del recipiente.

Desde siguiente () constriñe lector de movimiento para el contexto de contención actual, llamar Siguiente () cuando el lector se coloca en un elemento contenedor avanzará sobre el recipiente, omitiendo sus elementos miembros (y los miembros de los contenedores anidados) hasta que alcanza la primera elemento después del contenedor.

Cuando no hay elementos adicionales dentro de un contexto de contención particular, el siguiente () método devolverá un WEAVE_END_OF_TLV error y la posición del lector permanecerá sin cambios.

Detalles
Valores devueltos
WEAVE_NO_ERROR
Si el TLVUpdater lector se posicionó con éxito en un nuevo elemento.
other
Devuelve la armadura o códigos de error devueltos por la plataforma TLVReader :: Skip () y TLVReader :: Next () método.

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Poner

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

Poner

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

Poner

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

Poner

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

Poner

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

Poner

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

Poner

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

Poner

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

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Poner

WEAVE_ERROR Put(
  uint64_t tag,
  double v
)

PutBoolean

l10n-placeholder = 56

PutBytes

l10n-placeholder = 57

PutNull

l10n-placeholder = 58

PutString

l10n-placeholder = 59

PutString

l10n-placeholder = 60

SetImplicitProfileId

l10n-placeholder = 61

Establecer el ID del perfil implícito para el objeto TLVUpdater.

Este método establece el ID de perfil implícito para el objeto TLVUpdater. Cuando se le pide el actualizador para codificar un nuevo elemento, si el ID de perfil de la etiqueta asociada con el nuevo elemento coincide con el valor de la profileId, el actualizador codificará la etiqueta en forma implícita, omitiendo de este modo la ID de perfil en el proceso.

Detalles
Parámetros
[in] profileId
El ID de perfil de las etiquetas que deben codificarse de forma implícita.

StartContainer

l10n-placeholder = 62

VerifyEndOfContainer

l10n-placeholder = 63