nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Fornisce un'interfaccia Reader/Writer unificata per modificare/aggiungere/eliminare elementi con codifica TLV.
Riepilogo
TLVUpdater è un'unione di oggetti TLVReader e TLVWriter e fornisce metodi di interfaccia per modificare/eliminare i dati in una codifica, nonché per aggiungere nuovi elementi alla codifica TLV. L'oggetto TLVUpdater agisce essenzialmente come due cursori, uno per la lettura della codifica esistente e l'altro per la scrittura (per copiare dati esistenti o per scrivere nuovi dati).
Dal punto di vista semantico, l'oggetto TLVUpdater funziona come l'unione di TLVReader e TLVWriter. I metodi TLVUpdater hanno significati più o meno simili a quelli delle controparti con nomi simili in TLVReader/TLVWriter. Qualora ci siano differenze nella semantica, le differenze sono chiaramente documentate nella sezione dei commenti della funzione in WeaveTLVUpdater.cpp.
Una nota particolarmente importante sui metodi PutBytes() e PutString() di TLVUpdater è che possono lasciare la codifica in uno stato danneggiato con solo l'intestazione dell'elemento scritta quando si verifica un overflow. Le applicazioni possono chiamare GetRemainingFreeLength() per assicurarsi che ci sia spazio libero circa per scrivere la codifica. Tieni presente che GetRemainingFreeLength() indica solo i byte senza costi disponibili e non è possibile che l'applicazione conosca la lunghezza dei dati codificati che vengono scritti. In caso di overflow, sia PutBytes() che PutString() restituiranno WEAVE_ERROR_BUFFER_TOO_Small al chiamante.
Inoltre, tieni presente che il metodo Next() è sovraccarico per ignorare l'elemento corrente e anche far avanzare il lettore interno all'elemento successivo. Poiché saltare elementi già codificati richiede la modifica delle variabili di stato dello spazio libero del writer interno per tenere conto del nuovo spazio liberato (reso disponibile saltando), l'applicazione dovrebbe chiamare Next() nell'aggiornamento dopo un metodo Get() di cui non desidera scrivere il valore (il che equivale a saltare l'elemento corrente).
Funzioni pubbliche |
|
---|---|
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 un oggetto TLVUpdater per la lettura degli elementi di un container.
|
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)
|
Inizializza un oggetto TLVUpdater per modificare un singolo buffer di input.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
Inizializza un oggetto TLVUpdater utilizzando un TLVReader.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
Sposta tutto dal punto di lettura attuale di TLVUpdater fino alla fine del buffer di input TLV all'output.
|
Next(void)
|
Salta l'elemento corrente e passa all'oggetto TLVUpdater all'elemento successivo nell'input 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
Imposta l'ID profilo implicito per l'oggetto TLVUpdater.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Funzioni pubbliche
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 )
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Prepara un oggetto TLVUpdater per la lettura degli elementi di un container.
Inoltre, codifica un inizio dell'oggetto container nell'output TLV.
Il metodo EnterContainer() prepara l'oggetto TLVUpdater corrente per iniziare a leggere gli elementi membro di un container TLV (una struttura, un array o un percorso). Per ogni chiamata alle applicazioni EnterContainer() deve effettuare una chiamata corrispondente a ExitContainer().
Quando viene chiamato EnterContainer(), il lettore di TLVUpdater deve essere posizionato sull'elemento contenitore. Il metodo prende come argomento un riferimento a un valore TLVType che verrà utilizzato per salvare il contesto del programma di aggiornamento durante la lettura del container.
Quando viene restituito il metodo EnterContainer(), il programma di aggiornamento viene posizionato immediatamente prima del primo membro del contenitore. Se chiami ripetutamente Next(), il programma di aggiornamento avanza tra i membri della raccolta fino al raggiungimento della fine, dopodiché l'aggiornamento restituirà WEAVE_END_OF_TLV.
Quando l'applicazione ha terminato di leggere un container, può continuare a leggere gli elementi dopo il container chiamando il metodo ExitContainer().
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Completa la lettura di un elemento container TLV e codifica una fine dell'elemento TLV nell'output TLV.
Il metodo ExitContainer() ripristina lo stato di un oggetto TLVUpdater dopo una chiamata a EnterContainer(). Per ogni chiamata alle applicazioni EnterContainer() deve effettuare una chiamata corrispondente a ExitContainer(), passando il valore di contesto restituito dal metodo EnterContainer().
Quando viene restituito ExitContainer(), il lettore TLVUpdater viene posizionato immediatamente prima del primo elemento che segue il container nell'input TLV. A questo punto le applicazioni possono chiamare Next() per passare da un elemento all'altro.
Una volta chiamata EnterContainer(), le applicazioni possono chiamare ExitContainer() sul programma di aggiornamento in qualsiasi momento, indipendentemente dal fatto che tutti gli elementi nel contenitore sottostante siano stati letti. Inoltre, ricorda che se chiami ExitContainer() prima di leggere tutti gli elementi nel container, il container aggiornato verrà troncato nell'output TLV.
Dettagli | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametri |
|
||||||||||
Valori restituiti |
|
Finalizza
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 )
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
Inizia
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Inizializza un oggetto TLVUpdater per modificare un singolo buffer di input.
Quando chiami questo metodo, i dati TLV nel buffer vengono spostati alla fine del buffer e un oggetto TLVReader privato viene inizializzato su questo buffer riposizionato. Viene inizializzato anche un oggetto TLVWriter privato nello spazio libero ora disponibile all'inizio. Le applicazioni possono utilizzare l'oggetto TLVUpdater per analizzare i dati TLV e modificare/eliminare elementi esistenti o aggiungerne di nuovi alla codifica.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
Inizia
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
Inizializza un oggetto TLVUpdater utilizzando un TLVReader.
Quando chiami questo metodo, i dati TLV nel buffer a cui punta TLVReader vengono spostati dal punto di lettura corrente alla fine del buffer. Un nuovo oggetto TLVReader privato viene inizializzato per la lettura da questa nuova posizione, mentre un nuovo oggetto TLVWriter privato viene inizializzato per la scrittura nello spazio di buffer liberato.
Tieni presente che se TLVReader è già posizionato "su" un elemento, viene prima eseguito il backup all'inizio di quell'elemento. Tieni inoltre presente che questo backup funziona bene con gli elementi container, ad esempio, se TLVReader è già stato utilizzato per chiamare EnterContainer(), non c'è nulla da eseguire il backoff. Tuttavia, se TLVReader è stato posizionato sull'elemento container e EnterContainer() non è stato ancora chiamato, viene eseguito il backup dell'oggetto TLVReader all'inizio dell'intestazione container.
L'oggetto TLVReader di input verrà eliminato prima della restituzione e l'applicazione non deve utilizzarlo al momento dell'invio.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
Sposta
WEAVE_ERROR Move( void )
Copia l'elemento corrente dall'input TLV all'output TLV.
Il metodo Move() copia l'elemento corrente su cui è posizionato il lettore di TLVUpdater, nell'autore di TLVUpdater. L'applicazione deve chiamare Next() e posizionare il lettore TLVUpdater su un elemento prima di chiamare questo metodo. Come nel caso del metodo TLVReader::Next(), se il lettore è posizionato su un elemento contenitore al momento della chiamata, verranno copiati tutti i membri del contenitore. Se il lettore non è posizionato su alcun elemento, non cambia nulla quando chiami questo metodo.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Valori restituiti |
|
MoveUntilEnd
void MoveUntilEnd( void )
Sposta tutto dal punto di lettura attuale di TLVUpdater fino alla fine del buffer di input TLV all'output.
Questo metodo supporta lo spostamento di tutto dal punto di lettura corrente di TLVUpdater fino alla fine del buffer del lettore all'autore di TLVUpdater.
Avanti
WEAVE_ERROR Next( void )
Salta l'elemento corrente e passa all'oggetto TLVUpdater all'elemento successivo nell'input TLV.
Il metodo Next() ignora l'elemento corrente nell'input TLV e fa avanzare il lettore TLVUpdater all'elemento successivo che risiede nello stesso contesto di contenimento. In particolare, se il lettore è posizionato al livello più esterno di una codifica TLV, chiamando Next() lo sposterà all'elemento più in alto successivo. Se il lettore è posizionato all'interno di un elemento contenitore TLV (una struttura, un array o un percorso), chiamando Next() lo sposterà all'elemento membro successivo del container.
Poiché Next() vincola il movimento del lettore al contesto di contenimento corrente, chiamando Next() quando il lettore è posizionato su un elemento contenitore, avanzerà sopra il container, saltando i relativi elementi membro (e i membri di qualsiasi contenitore nidificato) fino a raggiungere il primo elemento dopo il container.
Quando non ci sono altri elementi all'interno di un determinato contesto di contenimento, il metodo Next() restituirà un errore WEAVE_END_OF_TLV e la posizione del lettore rimarrà invariata.
Dettagli | |||||
---|---|---|---|---|---|
Valori restituiti |
|
Adotta
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Adotta
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Adotta
WEAVE_ERROR Put( uint64_t tag, float v )
Adotta
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 )
Imposta l'ID profilo implicito per l'oggetto TLVUpdater.
Questo metodo consente di impostare l'ID profilo implicito per l'oggetto TLVUpdater. Quando all'utente di aggiornamento viene chiesto di codificare un nuovo elemento, se l'ID profilo del tag associato al nuovo elemento corrisponde al valore di profileId
, lo strumento di aggiornamento codifica il tag in forma implicita, omettendo così l'ID profilo nel processo.
Dettagli | |||
---|---|---|---|
Parametri |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )