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) | |
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) | |
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 |
| ||||||
Valores devueltos |
|
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 |
| ||||||||||
Valores devueltos |
|
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 |
| ||||||
Valores devueltos |
|
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 |
| ||||||
Valores devueltos |
|
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 |
|
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 |
|
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 = 56PutBytes
l10n-placeholder = 57PutNull
l10n-placeholder = 58PutString
l10n-placeholder = 59PutString
l10n-placeholder = 60SetImplicitProfileId
l10n-placeholder = 61Establecer 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 |
|