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)
Kończy odczyt elementu kontenera TLV i koduje koniec elementu TLV w danych wyjściowych TLV.
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)
Kopiuje bieżący element z danych wejściowych TLV na wyjściu TLV.
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
[out] outerContainerType
Odwołanie do wartości TLVType, która otrzyma kontekst aktualizatora.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INCORRECT_STATE
Jeśli czytnik TLVUpdater nie jest umieszczony na elemencie kontenera.
other
Każdy inny kod błędu Weave lub platformy zwracany przez funkcję TLVWriter::StartContainer() lub TLVReader::EnterContainer().

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
[in] outerContainerType
Wartość TLVType, która została zwrócona przez metodę EnterContainer().
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_TLV_UNDERRUN
Jeśli kodowanie TLV zostało zakończone przedwcześnie.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli aktualizator napotkał nieprawidłowy lub nieobsługiwany typ elementu TLV.
WEAVE_ERROR_INVALID_TLV_TAG
Jeśli aktualizator napotkał tag TLV w nieprawidłowym kontekście.
other
Każdy inny kod błędu Weave lub platformy zwracany przez funkcję TLVWriter::EndContainer() lub TLVReader::ExitContainer().

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
[in] buf
Wskaźnik do bufora zawierającego dane TLV do edycji.
[in] dataLen
Długość danych TLV w buforze.
[in] maxLen
Całkowita długość bufora.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INVALID_ARGUMENT
Jeśli adres bufora jest nieprawidłowy.
WEAVE_ERROR_BUFFER_TOO_SMALL
Jeśli bufor jest za mały.

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
[in,out] aReader
Odwołanie do obiektu TLVReader, który zostanie zniszczony przed zwróceniem.
[in] freeLen
Długość wolnego miejsca (w bajtach) dostępnej w wstępnie zakodowanym buforze danych.
Zwracane wartości
WEAVE_NO_ERROR
Jeśli przy użyciu metody się udało:
WEAVE_ERROR_INVALID_ARGUMENT
Jeśli adres bufora jest nieprawidłowy.
WEAVE_ERROR_NOT_IMPLEMENTED
Jeśli czytnik został zainicjowany w łańcuchu buforów.

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
WEAVE_NO_ERROR
Czy czytnik TLVUpdater został prawidłowo umieszczony na nowym elemencie.
WEAVE_END_OF_TLV
Jeśli czytnik TLVUpdater wskazuje koniec kontenera.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Jeśli czytnik TLVIpdater nie jest umieszczony na prawidłowym elemencie TLV.
other
Zwraca inne kody błędów zwracane przez metodę TLVReader::Skip().

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
WEAVE_NO_ERROR
Czy czytnik TLVUpdater został prawidłowo umieszczony na nowym elemencie.
other
Zwraca kody błędów Weave lub platformy zwrócone przez metody TLVReader::Skip() i TLVReader::Next().

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
[in] profileId
Identyfikator profilu tagów, które powinny być zakodowane w formie niejawnej.

StartContainer

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)