nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Bietet eine einheitliche Reader/Writer-Benutzeroberfläche zum Bearbeiten, Hinzufügen/Löschen von Elementen in der TLV-Codierung.
Zusammenfassung
Der TLVUpdater vereint die Objekte TLVReader und TLVWriter und bietet Schnittstellenmethoden zum Bearbeiten/Löschen von Daten in einer Codierung sowie zum Hinzufügen neuer Elemente zur TLV-Codierung. Das Objekt TLVUpdater verhält sich im Grunde wie zwei Cursor: einer zum Lesen der vorhandenen Codierung und der andere zum Schreiben (entweder zum Kopieren vorhandener Daten oder zum Schreiben neuer Daten).
Semantisch funktioniert das TLVUpdater-Objekt wie eine Vereinigung von TLVReader und TLVWriter. Die Methoden TLVUpdater haben mehr oder weniger ähnliche Bedeutungen als die gleichnamigen Gegenstücke in TLVReader/TLVWriter. Bei unterschiedlichen Semantiken werden diese klar im Kommentarbereich der Funktion in WeaveTLVUpdater.cpp dokumentiert.
Ein besonders wichtiger Hinweis zu den PutBytes()- und PutString()-Methoden von TLVUpdater ist, dass die Codierung beschädigt bleibt und nur bei einem Überlauf der Element-Header geschrieben wird. Die Anwendungen GetGetFreeLength() können aufgerufen werden, um sicherzustellen, dass ungefähr genügend freier Speicherplatz für die Codierung verfügbar ist. Mit GetÜlingFreeLength() werden Sie nur über die verfügbaren kostenlosen Byte informiert. Außerdem kann die Anwendung die Länge der codierten Daten nicht ermitteln. Bei einem Überlauf geben sowohl PutBytes() als auch PutString() WEAVE_ERROR_BUFFER_TOO_METRIC an den Aufrufer zurück.
Die Methode Next() wird überladen, um sowohl das aktuelle Element zu überspringen als auch den internen Leser zum nächsten Element weiterzuleiten. Weil beim Überspringen bereits codierter Elemente die internen Variablen des kostenlosen Leerzeichens vom Schreiber geändert werden müssen, um den neuen kostenlos gewordenen Speicherplatz (durch Überspringen verfügbar) zu berücksichtigen, wird von der App erwartet, dass sie nach einer Get()-Methode, deren Wert nicht zurückgeschrieben werden soll, Next() für den Updater aufruft. Dies entspricht dem Überspringen des aktuellen Elements.
Öffentliche Funktionen |
|
---|---|
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)
|
Bereitet ein TLVUpdater-Objekt für das Lesen von Elementen eines Containers vor.
|
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)
|
Initialisieren Sie ein TLVUpdater-Objekt, um einen einzelnen Eingabepuffer zu bearbeiten.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
Initialisieren Sie ein TLVUpdater-Objekt mit einem TLVReader.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
Verschiebt alles vom aktuellen Lesepunkt des TLVUpdater bis zum Ende des TLV-Eingabepuffers in die Ausgabe.
|
Next(void)
|
Überspringen Sie das aktuelle Element und fahren Sie mit dem TLVUpdater-Objekt zum nächsten Element im Eingabe-TLV fort.
|
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
Legen Sie die implizite Profil-ID für das TLVUpdater-Objekt fest.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Öffentliche Funktionen
Textelement
WEAVE_ERROR CopyElement( TLVReader & reader )
Textelement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Dup-String
WEAVE_ERROR DupString( char *& buf )
Endcontainer
WEAVE_ERROR EndContainer( TLVType outerContainerType )
Eingabetaste
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Bereitet ein TLVUpdater-Objekt für das Lesen von Elementen eines Containers vor.
Außerdem wird ein Start des Containerobjekts im Ausgabe-TLV codiert.
Mit der Methode EnterContainer() wird das aktuelle Objekt TLVUpdater so vorbereitet, dass die Mitgliedselemente des Containers TLV (Struktur, Array oder Pfad) gelesen werden. Für jeden Aufruf von EnterContainer()-Anwendungen muss ein entsprechender Aufruf an ExitContainer() erfolgen.
Wenn EnterContainer() aufgerufen wird, muss der TLVUpdater im Containerelement positioniert werden. Die Methode akzeptiert als Argument einen Verweis auf einen TLVType-Wert, mit dem der Kontext des Updaters beim Lesen des Containers gespeichert wird.
Wenn die Methode EnterContainer() zurückgegeben wird, wird der Updater unmittelbar vor dem ersten Mitglied des Containers positioniert. Durch wiederholtes Aufrufen von Next() wird der Updater durch die Mitglieder der Sammlung weitergeleitet, bis das Ende erreicht ist. Dann gibt der Updater WEAVE_END_OF_TLV zurück.
Sobald die Anwendung einen Container gelesen hat, kann er die Elemente nach dem Container lesen. Dazu ruft er die Methode ExitContainer() auf.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
Exit-Container
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Damit wird das Lesen eines TLV-Containerelements abgeschlossen und das Ende des TLV-Elements in der Ausgabe TLV codiert.
Die Methode ExitContainer() stellt den Status eines TLVUpdater-Objekts nach einem Aufruf von EnterContainer() wieder her. Für jeden Aufruf von EnterContainer()-Anwendungen muss ein entsprechender Aufruf an ExitContainer() erfolgen. Dabei muss der von der Methode EnterContainer() zurückgegebene Kontextwert übergeben werden.
Wenn ExitContainer() zurückgegeben wird, wird der TLVUpdater-Leser unmittelbar vor dem ersten Element platziert, das dem Container im Eingabe-TLV folgt. Von hier aus können Anwendungen Next() aufrufen, um durch alle verbleibenden Elemente zu gelangen.
Sobald EnterContainer() aufgerufen wird, können Anwendungen ExitContainer() auf dem Updater jederzeit aufrufen, unabhängig davon, ob alle Elemente im zugrunde liegenden Container gelesen wurden. Außerdem führt das Aufrufen von ExitContainer() vor dem Lesen aller Elemente im Container dazu, dass der aktualisierte Container in der Ausgabe TLV abgeschnitten wird.
Details | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parameter |
|
||||||||||
Rückgabewerte |
|
Abschließen
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 )
GetByte
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
GetContainerType
TLVType GetContainerType( void ) const
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
ImpliziteProfil-ID
uint32_t GetImplicitProfileId( void )
GetLength
uint32_t GetLength( void ) const
GetLengthRead
uint32_t GetLengthRead( void ) const
GetLengthWriter
uint32_t GetLengthWritten( void )
GetReader
void GetReader( TLVReader & containerReader )
Übrige FreeLength
uint32_t GetRemainingFreeLength( void )
Restlänge
uint32_t GetRemainingLength( void ) const
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
GetTag
uint64_t GetTag( void ) const
GetType (Typ)
TLVType GetType( void ) const
Init
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
Initialisieren Sie ein TLVUpdater-Objekt, um einen einzelnen Eingabepuffer zu bearbeiten.
Beim Aufrufen dieser Methode werden die TLV-Daten im Zwischenspeicher an das Ende des Zwischenspeichers verschoben und ein privates TLVReader-Objekt für diesen verschobenen Zwischenspeicher initialisiert. Ein privates TLVWriter-Objekt wird auch im freien Speicherplatz initialisiert, der jetzt am Anfang verfügbar ist. Anwendungen können das Objekt TLVUpdater verwenden, um die TLV-Daten zu parsen und vorhandene Elemente zu ändern oder zu löschen oder der Codierung neue Elemente hinzuzufügen.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
Initialisieren Sie ein TLVUpdater-Objekt mit einem TLVReader.
Beim Aufrufen dieser Methode werden die TLV-Daten im Zwischenspeicher, auf die der TLVReader verweist, vom aktuellen Lesepunkt an das Ende des Zwischenspeichers verschoben. Ein neues privates TLVReader-Objekt wird initialisiert, um von diesem neuen Speicherort zu lesen. Ein neues privates TLVWriter-Objekt wird initialisiert, um in den freigegebenen Zwischenspeicher zu schreiben.
Hinweis: Wenn der TLVReader bereits auf einem Element positioniert ist, wird er zuerst an den Anfang des Elements zurückgesetzt. Beachten Sie auch, dass diese Sicherung gut mit Containerelementen funktioniert, d.h., wenn der TLVReader bereits zum Aufrufen von EnterContainer() verwendet wurde, gibt es nichts zu Backoff. Wenn der TLVReader jedoch auf dem Containerelement platziert war und EnterContainer() noch nicht aufgerufen wurde, wird das TLVReader-Objekt am Anfang des Containerkopfs gesichert.
Das Eingabeobjekt TLVReader wird vor der Rückkehr gelöscht und die Anwendung darf bei der Rückgabe nicht dasselbe verwenden.
Details | |||||||
---|---|---|---|---|---|---|---|
Parameter |
|
||||||
Rückgabewerte |
|
Verschieben
WEAVE_ERROR Move( void )
Kopiert das aktuelle Element von der Eingabe TLV in die Ausgabe TLV.
Die Methode Move() kopiert das aktuelle Element, auf dem sich der TLVUpdater befindet, in den Autor des TLVUpdaters. Die Anwendung muss Next() aufrufen und den TLVUpdater-Leser in einem Element positionieren, bevor diese Methode aufgerufen wird. Genau wie bei der Methode TLVReader::Next() werden alle Mitglieder des Containers kopiert, wenn der Leser zum Zeitpunkt des Aufrufs in einem Containerelement positioniert ist. Wenn sich der Leser nicht in der Nähe eines Elements befindet, ändert sich beim Aufruf dieser Methode nichts.
Details | |||||||||
---|---|---|---|---|---|---|---|---|---|
Rückgabewerte |
|
Verschieben bis Ende
void MoveUntilEnd( void )
Verschiebt alles vom aktuellen Lesepunkt des TLVUpdater bis zum Ende des TLV-Eingabepuffers in die Ausgabe.
Diese Methode unterstützt die Verschiebung alles vom aktuellen Lesepunkt des TLVUpdater bis zum Ende des Lesepuffers bis zum Autor des TLVUpdaters.
Weiter
WEAVE_ERROR Next( void )
Überspringen Sie das aktuelle Element und fahren Sie mit dem TLVUpdater-Objekt zum nächsten Element im Eingabe-TLV fort.
Mit der Methode Next() wird das aktuelle Element im Eingabe-TLV übersprungen und der TLVUpdater wird zum nächsten Element weitergeleitet, das sich im selben Begleitkontext befindet. Wenn der Leser insbesondere auf der äußersten Ebene einer TLV-Codierung positioniert ist, wird er durch Aufrufen von Next() zum nächsten, obersten Element weitergeleitet. Wenn sich der Reader in einem TLV-Containerelement (einer Struktur, einem Array oder einem Pfad) befindet, wird er beim Aufrufen von Next() zum nächsten Element des Containers weitergeleitet.
Da Next() die Lesebewegung auf den aktuellen Einschlusskontext einschränkt, wird durch Aufrufen von Next(), wenn der Leser auf einem Containerelement positioniert wird, über den Container verschoben. Dabei werden die zugehörigen Elementelemente (und die Mitglieder aller verschachtelten Container) übersprungen, bis das erste Element nach dem Container erreicht ist.
Wenn es in einem bestimmten Einschlusskontext keine weiteren Elemente gibt, gibt die Methode Next() den Fehlerwert WEAVE_END_OF_TLV zurück und die Position des Readers bleibt unverändert.
Details | |||||
---|---|---|---|---|---|
Rückgabewerte |
|
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 )
Put-String
WEAVE_ERROR PutString( uint64_t tag, const char *buf )
Put-String
WEAVE_ERROR PutString( uint64_t tag, const char *buf, uint32_t len )
SetImplicitProfileId
void SetImplicitProfileId( uint32_t profileId )
Legen Sie die implizite Profil-ID für das TLVUpdater-Objekt fest.
Mit dieser Methode wird die implizite Profil-ID für das Objekt TLVUpdater festgelegt. Wenn der Updater aufgefordert wird, ein neues Element zu codieren, und wenn die Profil-ID des mit dem neuen Element verknüpften Tags mit dem Wert von profileId
übereinstimmt, codiert das Updater das Tag implizit, wodurch die Profil-ID dabei wegfällt.
Details | |||
---|---|---|---|
Parameter |
|
Startcontainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )