nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Fornisce un'interfaccia di lettura/scrittura unificata per la modifica, l'aggiunta o l'eliminazione di elementi nella codifica TLV.
Riepilogo
TLVUpdater è una combinazione degli oggetti TLVReader e TLVWriter e fornisce metodi di interfaccia per modificare/eliminare i dati in una codifica e per aggiungere nuovi elementi alla codifica TLV. L'oggetto TLVUpdater funziona essenzialmente come due cursori, uno per la lettura della codifica esistente e un altro per la scrittura (per copiare dati esistenti o scrivere nuovi dati).
A livello semantico, l'oggetto TLVUpdater funziona come un'unione di TLVReader e TLVWriter. I metodi TLVUpdater hanno significati più o meno simili alle controparti con nomi simili in TLVReader/TLVWriter. In caso di differenze nella semantica, queste 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 Get StayingFreeLength() per assicurarsi che ci sia spazio libero circa sufficiente per scrivere la codifica. Tieni presente che GetStayingFreeLength() indica solo i byte senza costi disponibili e che non è in grado di determinare la lunghezza dei dati codificati che vengono scritti. In caso di overflow, sia PutBytes() che PutString() restituirà WEAVE_ERROR_BUFFER_TOO_Small al chiamante.
Inoltre, tieni presente che il metodo Next() è sovraccaricato per ignorare l'elemento corrente e far avanzare il lettore interno all'elemento successivo. Poiché per saltare elementi già codificati è necessario modificare le variabili di stato dello spazio libero dell'autore interno per tenere conto del nuovo spazio liberato (reso disponibile saltando), l'applicazione dovrebbe chiamare Next() sul programma di aggiornamento dopo un metodo Get() di cui non vuole scrivere il valore (equivalente a saltare l'elemento corrente).
di Gemini Advanced.
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 dall'attuale punto di lettura di TLVUpdater fino alla fine del buffer TLV di input nell'output.
|
Next(void)
|
Ignora l'elemento corrente e avanza l'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 l'inizio di un oggetto container nel TLV di output.
Il metodo EnterContainer() prepara l'oggetto TLVUpdater corrente per iniziare a leggere gli elementi membri di un container TLV (una struttura, un array o un percorso). Per ogni chiamata alle applicazioni EnterContainer() devono effettuare una chiamata corrispondente a ExitContainer().
Quando EnterContainer() viene chiamato, 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 container. La chiamata ripetuta a Next() consente di avanzare tra i membri della raccolta fino al raggiungimento della fine; a quel punto, il programma di aggiornamento restituirà WEAVE_END_OF_TLV.
Una volta che 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 la fine di un 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() devono 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 avanzare attraverso gli elementi rimanenti.
Una volta chiamato 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, tieni presente che chiamando ExitContainer() prima di leggere tutti gli elementi nel container, il container aggiornato verrà troncato nel TLV di output.
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
Init
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 in questo buffer riposizionato viene inizializzato un oggetto TLVReader privato. 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 aggiungere nuovi elementi alla codifica.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
Init
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 viene inizializzato per la lettura da questa nuova posizione, mentre un nuovo oggetto TLVWriter privato viene inizializzato per scrivere nello spazio del buffer liberato.
Tieni presente che se TLVReader è già posizionato su "On" di un elemento, ne viene prima eseguito il backup all'inizio di quell'elemento. Tieni inoltre presente che questo backoff funziona bene con gli elementi container, ad esempio se TLVReader è già stato utilizzato per chiamare EnterContainer(), non c'è nulla di cui eseguire il backoff. Tuttavia, se TLVReader è stato posizionato sull'elemento container e la funzione EnterContainer() non è ancora stata chiamata, l'oggetto TLVReader viene eseguito il back-off all'inizio dell'intestazione del container.
L'oggetto TLVReader di input verrà eliminato prima della restituzione e l'applicazione non deve utilizzarlo al momento del ritorno.
Dettagli | |||||||
---|---|---|---|---|---|---|---|
Parametri |
|
||||||
Valori restituiti |
|
Sposta
WEAVE_ERROR Move( void )
Copia l'elemento corrente dall'input TLV in output TLV.
Il metodo Sposta() copia l'elemento corrente su cui è posizionato il lettore di TLVUpdater nel writer di TLVUpdater. L'applicazione deve chiamare Next() e posizionare il lettore di 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, tutti i membri del contenitore verranno copiati. Se il lettore non è posizionato su alcun elemento, la chiamata di questo metodo non cambia.
Dettagli | |||||||||
---|---|---|---|---|---|---|---|---|---|
Valori restituiti |
|
MoveUntilEnd
void MoveUntilEnd( void )
Sposta tutto dall'attuale punto di lettura di TLVUpdater fino alla fine del buffer TLV di input nell'output.
Questo metodo supporta lo spostamento di tutto dall'attuale punto di lettura di TLVUpdater fino alla fine del buffer del lettore al writer di TLVUpdater.
Avanti
WEAVE_ERROR Next( void )
Ignora l'elemento corrente e avanza l'oggetto TLVUpdater all'elemento successivo nell'input TLV.
Il metodo Next() ignora l'elemento corrente nell'input TLV e fa avanzare il lettore di TLVUpdater all'elemento successivo che risiede nello stesso contesto di contenimento. In particolare, se il lettore è posizionato all'estremità più esterna di una codifica TLV, la chiamata a Next() consente di avanzare all'elemento immediatamente successivo. Se il lettore viene posizionato all'interno di un elemento contenitore TLV (una struttura, un array o un percorso), la chiamata a Next() lo avanza all'elemento membro successivo del contenitore.
Poiché Next() vincola il movimento del lettore al contesto di contenimento corrente, la chiamata a Next() quando il lettore è posizionato su un elemento contenitore avanza oltre il container, saltando i relativi elementi membri (e i membri di eventuali contenitori nidificati) fino a raggiungere il primo elemento dopo il contenitore.
Quando non ci sono altri elementi in un particolare 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 imposta l'ID profilo implicito per l'oggetto TLVUpdater. Quando al programma di aggiornamento viene chiesto di codificare un nuovo elemento, se l'ID profilo del tag associato al nuovo elemento corrisponde al valore dell'elemento profileId
, il programma 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 )