nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Udostępnia ujednolicony interfejs czytnika/zapisu do edytowania, dodawania i usuwania elementów w kodowaniu TLV.
Podsumowanie
Obiekt TLVUpdater to połączenie obiektów TLVReader i TLVWriter oraz udostępnia metody interfejsu do edycji i usuwania danych w kodowaniu, a także dodawania nowych elementów do kodowania TLV. Obiekt TLVUpdater działa jak dwa kursory: jeden do odczytu istniejącego kodowania, a drugi do zapisu (kopiowanie istniejących danych lub zapisywanie nowych).
Obiekt TLVUpdater działa jak połączenie obiektów TLVReader i TLVWriter. Metody TLVUpdater mają mniej lub bardziej podobne znaczenie co ich odpowiedniki w programie TLVReader/TLVWriter. Jeśli występują różnice w semantyce, są one wyraźnie udokumentowane w sekcji komentarza funkcji w pliku WeaveTLVUpdater.cpp.
Szczególnie ważną uwaga na temat metod PutBytes() i putString() w narzędziu TLVUpdater polega na tym, że w przypadku przepełnienia kodowanie może zostać uszkodzone tylko w nagłówku elementu. Aplikacje mogą wywoływać GetRemainingFreeLength(), aby upewnić się, że jest w przybliżeniu wystarczającą ilość wolnego miejsca na zapis kodu. Pamiętaj, że GetRemainingFreeLength() informuje tylko o dostępnych wolnych bajtach, a aplikacja nie może w żaden sposób poznać długości zakodowanych danych, które są zapisywane. W przypadku przepełnienia funkcje PutBytes() i PutString() zwróci do elementu wywołującego WEAVE_ERROR_BUFFER_TOO_SMALL.
Pamiętaj też, że metoda Next() jest przeciążona, aby pominąć bieżący element, a także przenieść czytnik wewnętrzny do następnego. Ponieważ pomijanie już zakodowanych elementów wymaga zmiany zmiennych stanu wolnego miejsca wewnętrznego zapisującego, aby uwzględnić nową zwolnioną przestrzeń (udostępnioną przez pominięcie), aplikacja powinna wywołać funkcję Next() w aktualizatorze po użyciu metody Get(), której wartości nie chce zapisywać (co jest równoważne z pominięciem bieżącego elementu).
.
Funkcje publiczne |
|
---|---|
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)
|
Przygotowuje obiekt TLVUpdater do odczytu elementów kontenera.
|
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)
|
Zainicjuj obiekt TLVUpdater, aby edytować pojedynczy bufor wejściowy.
|
Init(TLVReader & aReader, uint32_t freeLen)
|
Zainicjuj obiekt TLVUpdater za pomocą narzędzia TLVReader.
|
Move(void)
|
|
MoveUntilEnd(void)
|
void
Przenieś wszystko od bieżącego punktu odczytu parametru TLVUpdater do końca bufora wejściowego TLV w kierunku wyjściowym.
|
Next(void)
|
Pomiń bieżący element i przesuń obiekt TLVUpdater do następnego elementu w danych wejściowych 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
Ustaw identyfikator profilu niejawnego dla obiektu TLVUpdater.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
Funkcje publiczne
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 )
Przygotowuje obiekt TLVUpdater do odczytu elementów kontenera.
Koduje również początek obiektu kontenera w danych wyjściowych TLV.
Metoda EnterContainer() przygotowuje bieżący obiekt TLVUpdater tak, aby rozpocząć odczyt elementów składowych kontenera TLV (struktury, tablicy lub ścieżki). Każde wywołanie funkcji EnterContainer() musi wywołać odpowiednie wywołanie ExitContainer().
Gdy wywoływana jest metoda EnterContainer(), czytnik TLVUpdater musi być umieszczony w elemencie kontenera. Ta metoda przyjmuje jako argument odwołanie do wartości TLVType, która będzie używana do zapisywania kontekstu aktualizatora podczas odczytu kontenera.
Po zwróceniu metody EnterContainer() aktualizator jest umieszczany bezpośrednio przed pierwszym elementem kontenera. Powtarzające się wywołanie funkcji Next() przenosi aktualizator przez elementy kolekcji aż do osiągnięcia wartości końcowej, kiedy to narzędzie zwróci wartość WEAVE_END_OF_TLV.
Gdy aplikacja zakończy odczyt kontenera, może kontynuować odczytywanie elementów znajdujących się za nim, wywołując metodę ExitContainer().
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Kończy odczyt elementu kontenera TLV i koduje koniec elementu TLV w danych wyjściowych TLV.
Metoda ExitContainer() przywraca stan obiektu TLVUpdater po wywołaniu funkcji EnterContainer(). Każde wywołanie aplikacji EnterContainer() musi wywołać odpowiednie wywołanie ExitContainer(), przekazując wartość kontekstu zwrócona przez metodę EnterContainer().
Gdy zwracana jest metoda ExitContainer(), czytnik TLVUpdater jest w danych wejściowych TLV umieszczony bezpośrednio przed pierwszym elementem, który występuje za kontenerem. Od tego momentu aplikacje mogą wywoływać metodę Next(), aby przechodzić do kolejnych elementów.
Po wywołaniu funkcji EnterContainer() aplikacje mogą wywołać funkcję ExitContainer() w aktualizatorze w dowolnym momencie, niezależnie od tego, czy wszystkie elementy w kontenerze bazowym zostały odczytane. Pamiętaj też, że wywołanie metody ExitContainer() przed odczytaniem wszystkich elementów w kontenerze spowoduje obcięcie zaktualizowanego kontenera w danych wyjściowych TLV.
Szczegóły | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Parametry |
|
||||||||||
Zwracane wartości |
|
Zakończ
WEAVE_ERROR Finalize( void )
Pobierz
WEAVE_ERROR Get( bool & v )
Pobierz
WEAVE_ERROR Get( int8_t & v )
Pobierz
WEAVE_ERROR Get( int16_t & v )
Pobierz
WEAVE_ERROR Get( int32_t & v )
Pobierz
WEAVE_ERROR Get( int64_t & v )
Pobierz
WEAVE_ERROR Get( uint8_t & v )
Pobierz
WEAVE_ERROR Get( uint16_t & v )
Pobierz
WEAVE_ERROR Get( uint32_t & v )
Pobierz
WEAVE_ERROR Get( uint64_t & v )
Pobierz
WEAVE_ERROR Get( float & v )
Pobierz
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 )
Zainicjuj obiekt TLVUpdater, aby edytować pojedynczy bufor wejściowy.
Po wywołaniu tej metody dane TLV w buforze są przenoszone na koniec bufora, a w tym przeniesionym buforze inicjowany jest prywatny obiekt TLVReader. W wolnym miejscu, które jest teraz dostępne na początku, inicjowany jest również prywatny obiekt TLVWriter. Aplikacje mogą używać obiektu TLVUpdater do analizowania danych TLV i modyfikowania/usuwania istniejących elementów lub dodawania nowych do kodowania.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
Zainicjuj obiekt TLVUpdater za pomocą narzędzia TLVReader.
Po wywołaniu tej metody dane TLV w buforze wskazanym przez TLVReader są przenoszone z bieżącego punktu odczytu na koniec bufora. Zainicjowany zostanie nowy prywatny obiekt TLVReader do odczytu z tej nowej lokalizacji, a nowy prywatny obiekt TLVWriter zostanie zainicjowany w celu zapisu w wolnym miejscu w buforze.
Pamiętaj, że jeśli moduł TLVReader jest już ustawiony na „on” elementu, zostaje on wycofany na początku tego elementu. Pamiętaj też, że to wycofanie działa dobrze z elementami kontenera. Oznacza to, że jeśli moduł TLVReader został już użyty do wywołania funkcji EnterContainer(), nie ma nic do wycofania. Jeśli jednak obiekt TLVReader znajduje się w elemencie kontenera, a funkcja EnterContainer() nie została jeszcze wywołana, obiekt TLVReader jest wycofany na początku nagłówka kontenera.
Obiekt wejściowy TLVReader zostanie zniszczony przed zwróceniem, a aplikacja nie może go użyć przy zwracaniu.
Szczegóły | |||||||
---|---|---|---|---|---|---|---|
Parametry |
|
||||||
Zwracane wartości |
|
Przenieś
WEAVE_ERROR Move( void )
Kopiuje bieżący element z danych wejściowych TLV na wyjściu TLV.
Metoda Move() kopiuje bieżący element, w którym znajduje się czytnik TLVUpdater, do zapisującego obiekt TLVUpdater. Przed wywołaniem tej metody aplikacja powinna wywołać metodę Next() i umieścić czytnik TLVUpdater w elemencie. Podobnie jak w przypadku metody TLVReader::Next(), jeśli w momencie wywołania czytelnik znajduje się na elemencie kontenera, wszyscy jego elementy zostaną skopiowane. Jeśli czytnik nie jest umieszczony na żadnym elemencie, wywołanie tej metody nie spowoduje zmiany.
Szczegóły | |||||||||
---|---|---|---|---|---|---|---|---|---|
Zwracane wartości |
|
MoveUntilEnd
void MoveUntilEnd( void )
Przenieś wszystko od bieżącego punktu odczytu parametru TLVUpdater do końca bufora wejściowego TLV w kierunku wyjściowym.
Ta metoda pozwala przenieść wszystkie dane z bieżącego punktu odczytu TLVUpdater do końca bufora czytnika do zapisującego w TLVUpdater.
.Dalej
WEAVE_ERROR Next( void )
Pomiń bieżący element i przesuń obiekt TLVUpdater do następnego elementu w danych wejściowych TLV.
Metoda Next() pomija bieżący element w danych wejściowych TLV i przenosi czytnik TLVUpdater do następnego elementu, który znajduje się w tym samym kontekście ograniczenia. W szczególności jeśli czytnik znajduje się na najbardziej zewnętrznym poziomie kodowania TLV, wywołanie funkcji Next() przeniesie go do następnego elementu, który znajduje się na samej górze. Jeśli czytnik znajduje się w elemencie kontenera TLV (strukturze, tablicy lub ścieżce), wywołanie funkcji Next() spowoduje przejście do następnego elementu kontenera.
Funkcja Next() ogranicza ruch czytnika do bieżącego kontekstu zawartości, dlatego wywołanie funkcji Next(), gdy czytelnik znajduje się w elemencie kontenera, przechodzi nad kontenerem, pomijając jego elementy składowe (oraz elementy wszystkich zagnieżdżonych kontenerów), aż dotrze do pierwszego elementu po kontenerze.
Gdy w konkretnym kontekście zawartości nie ma innych elementów, metoda Next() zwraca błąd WEAVE_END_OF_TLV, a położenie czytnika pozostanie niezmienione.
Szczegóły | |||||
---|---|---|---|---|---|
Zwracane wartości |
|
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 )
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 )
Ustaw identyfikator profilu niejawnego dla obiektu TLVUpdater.
Ta metoda ustawia niejawny identyfikator profilu dla obiektu TLVUpdater. Jeśli identyfikator profilu tagu powiązanego z nowym elementem jest zgodny z wartością profileId
, aktualizator zakoduje tag w formie niejawnej, pomijając w tym procesie identyfikator profilu.
Szczegóły | |||
---|---|---|---|
Parametry |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )