Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

nl :: Плетение :: TLV :: TLVUpdater

#include <src/lib/core/WeaveTLV.h>

Предоставляет унифицированный интерфейс Reader / Writer для редактирования / добавления / удаления элементов в кодировке TLV .

Резюме

TLVUpdater представляет собой объединение объектовTLVReader иTLVWriter и предоставляет методы интерфейса для редактирования / удаления данных в кодировке, а также для добавления новых элементов в кодировку TLV . Объект TLVUpdater, по сути, действует как два курсора, один для чтения существующей кодировки, а другой для записи (либо для копирования существующих данных, либо для записи новых данных).

Семантически объект TLVUpdater функционирует как объединениеTLVReader иTLVWriter . Методы TLVUpdater имеют более или менее схожие значения, как и аналогичные методы в TLVReader / TLVWriter. Если есть различия в семантике, различия четко задокументированы в разделе комментариев к функции в WeaveTLVUpdater.cpp .

Одно особенно важное замечание о методах PutBytes () и PutString () TLVUpdater заключается в том, что при переполнении он может оставить кодировку в поврежденном состоянии с записью только заголовка элемента. Приложения могут вызывать GetRemainingFreeLength (), чтобы убедиться, что примерно достаточно свободного места для записи кодировки. Обратите внимание , что GetRemainingFreeLength () только говорят Вам доступные свободные байты , и нет никакой возможности для приложения , чтобы узнать длину закодированных данных , которые получают письменные. В случае переполнения и PutBytes (), и PutString () вернут вызывающей стороне WEAVE_ERROR_BUFFER_TOO_SMALL.

Также обратите внимание, что метод Next () перегружен как для пропуска текущего элемента, так и для перехода внутреннего модуля чтения к следующему элементу. Поскольку пропуск уже закодированных элементов требует изменения переменных состояния свободного пространства внутреннего модуля записи для учета нового освобожденного пространства (доступного путем пропуска), ожидается, что приложение вызовет Next () в средстве обновления после метода Get (), значение которого оно не выполняет 'не хочу писать обратно (что эквивалентно пропуску текущего элемента).

Публичные функции

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)
Подготавливает объект TLVUpdater для чтения элементов контейнера.
ExitContainer ( TLVType outerContainerType)
Завершает чтение элемента контейнера TLV и кодирует конец элемента TLV в выходном 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)
Инициализируйте объект TLVUpdater для редактирования одного входного буфера.
Init (TLVReader & aReader, uint32_t freeLen)
Инициализируйте объект TLVUpdater с помощьюTLVReader .
Move (void)
Копирует текущий элемент из входного TLV в выходной TLV .
MoveUntilEnd (void)
void
Переместите все из текущей точки чтения TLVUpdater до конца входного буфера TLV на выход.
Next (void)
Пропустить текущий элемент и переместить объект TLVUpdater к следующему элементу во входном 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
Установите неявный идентификатор профиля для объекта TLVUpdater .
StartContainer (uint64_t tag, TLVType containerType, TLVType & outerContainerType)
VerifyEndOfContainer (void)

Публичные функции

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
)

Подготавливает объект TLVUpdater для чтения элементов контейнера.

Он также кодирует начало объекта-контейнера в выходном TLV .

Метод EnterContainer () подготавливает текущий объект TLVUpdater к началу чтения элементов-членов контейнера TLV (структуры, массива или пути). Для каждого вызова EnterContainer () приложения должны делать соответствующий вызов ExitContainer () .

Когда вызывается EnterContainer () , считыватель TLVUpdater должен располагаться на элементе контейнера. Метод принимает в качестве аргумента ссылку на значение TLVType, которое будет использоваться для сохранения контекста средства обновления во время чтения контейнера.

Когда метод EnterContainer () возвращается, средство обновления располагается непосредственно перед первым членом контейнера. Повторный вызов Next () будет продвигать средство обновления по членам коллекции до тех пор, пока не будет достигнут конец, после чего средство обновления вернет WEAVE_END_OF_TLV.

Как только приложение завершит чтение контейнера, оно может продолжить чтение элементов после контейнера, вызвав метод ExitContainer () .

Подробности
Параметры
[out] outerContainerType
Ссылка на значение TLVType, которое получит контекст средства обновления.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INCORRECT_STATE
Если считыватель TLVUpdater не расположен на элементе контейнера.
other
Любой другой код ошибки Weave или платформы, возвращаемый TLVWriter :: StartContainer () или TLVReader :: EnterContainer () .

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Завершает чтение элемента контейнера TLV и кодирует конец элемента TLV в выходном TLV .

Метод ExitContainer () восстанавливает состояние объекта TLVUpdater после вызова EnterContainer () . Для каждого вызова EnterContainer () приложения должны выполнять соответствующий вызов ExitContainer () , передавая значение контекста, возвращаемое методом EnterContainer () .

Когда ExitContainer () возвращается, считыватель TLVUpdater располагается непосредственно перед первым элементом, который следует за контейнером во входном TLV . С этого момента приложения могут вызывать Next () для продвижения по оставшимся элементам.

После вызова EnterContainer () приложения могут вызывать ExitContainer () в средстве обновления в любой момент времени, независимо от того, были ли прочитаны все элементы в базовом контейнере. Также обратите внимание, что вызов ExitContainer () перед чтением всех элементов в контейнере приведет к усечению обновленного контейнера в выходном TLV .

Подробности
Параметры
[in] outerContainerType
Значение TLVType, возвращенное методом EnterContainer () .
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_TLV_UNDERRUN
Если базовое кодирование TLV закончилось преждевременно.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если программа обновления обнаружила недопустимый или неподдерживаемый тип элемента TLV .
WEAVE_ERROR_INVALID_TLV_TAG
Если программа обновления обнаружила тег TLV в недопустимом контексте.
other
Любой другой код ошибки Weave или платформы, возвращаемый TLVWriter :: EndContainer () или TLVReader :: ExitContainer () .

Завершить

WEAVE_ERROR Finalize(
  void
)

Получать

WEAVE_ERROR Get(
  bool & v
)

Получать

WEAVE_ERROR Get(
  int8_t & v
)

Получать

WEAVE_ERROR Get(
  int16_t & v
)

Получать

WEAVE_ERROR Get(
  int32_t & v
)

Получать

WEAVE_ERROR Get(
  int64_t & v
)

Получать

WEAVE_ERROR Get(
  uint8_t & v
)

Получать

WEAVE_ERROR Get(
  uint16_t & v
)

Получать

WEAVE_ERROR Get(
  uint32_t & v
)

Получать

WEAVE_ERROR Get(
  uint64_t & v
)

Получать

WEAVE_ERROR Get(
  float & v
)

Получать

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 

В этом

WEAVE_ERROR Init(
  uint8_t *buf,
  uint32_t dataLen,
  uint32_t maxLen
)

Инициализируйте объект TLVUpdater для редактирования одного входного буфера.

При вызове этого метода данные TLV в буфере перемещаются в конец буфера, и в этом перемещенном буфере инициализируется частный объектTLVReader . Частный объектTLVWriter также инициализируется на свободном пространстве, которое теперь доступно в начале. Приложения могут использовать объект TLVUpdater для анализа данных TLV и изменения / удаления существующих элементов или добавления новых элементов в кодировку.

Подробности
Параметры
[in] buf
Указатель на буфер, содержащий данные TLV для редактирования.
[in] dataLen
Длина данных TLV в буфере.
[in] maxLen
Общая длина буфера.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INVALID_ARGUMENT
Если адрес буфера недействителен.
WEAVE_ERROR_BUFFER_TOO_SMALL
Если буфер слишком мал.

В этом

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Инициализируйте объект TLVUpdater с помощьюTLVReader .

При вызове этого метода данные TLV в буфере, на который указываетTLVReader , перемещаются из текущей точки чтения в конец буфера. Новый частный объектTLVReader инициализируется для чтения из этого нового местоположения, в то время как новый частный объектTLVWriter инициализируется для записи в освобожденное буферное пространство.

Обратите внимание, что еслиTLVReader уже расположен «на» элементе, он сначала возвращается к началу этого элемента. Также обратите внимание, что этоотступление хорошо работает с элементами контейнера, т.е. еслиTLVReader уже использовался для вызова EnterContainer () , то отступать нечего. Но еслиTLVReader был размещен на элементе контейнера, а EnterContainer () еще не был вызван, то объектTLVReader откатывается до началазаголовка контейнера.

Входной объектTLVReader будет уничтожен перед возвратом, и приложение не должно использовать его при возврате.

Подробности
Параметры
[in,out] aReader
Ссылка на объектTLVReader, который будет уничтожен перед возвратом.
[in] freeLen
Длина свободного пространства (в байтах), доступного в буфере предварительно закодированных данных.
Возвращаемые значения
WEAVE_NO_ERROR
Если метод удался.
WEAVE_ERROR_INVALID_ARGUMENT
Если адрес буфера недействителен.
WEAVE_ERROR_NOT_IMPLEMENTED
Если считыватель был инициализирован в цепочке буферов.

Двигаться

WEAVE_ERROR Move(
  void
)

Копирует текущий элемент из входного TLV в выходной TLV .

Метод Move () копирует текущий элемент, на котором располагается считыватель TLVUpdater , в модуль записи TLVUpdater . Приложение должно вызвать Next () и разместить средство чтения TLVUpdater на элементе перед вызовом этого метода. Как и в случае с методом TLVReader :: Next () , если считыватель находится на элементе контейнера во время вызова, все члены контейнера будут скопированы. Если считыватель не расположен ни на одном элементе, при вызове этого метода ничего не меняется.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Если считыватель TLVUpdater был успешно размещен на новом элементе.
WEAVE_END_OF_TLV
Если считыватель TLVUpdater указывает на конец контейнера.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Если считыватель TLVIpdater не расположен на допустимом элементе TLV .
other
Возвращает другие коды ошибок, возвращаемые методом TLVReader :: Skip () .

MoveUntilEnd

void MoveUntilEnd(
  void
)

Переместите все из текущей точки чтения TLVUpdater до конца входного буфера TLV на выход.

Этот метод поддерживает перемещение всего от текущей точки чтения TLVUpdater до конца буфера считывателя в модуль записи TLVUpdater .

Следующий

WEAVE_ERROR Next(
  void
)

Пропустить текущий элемент и переместить объект TLVUpdater к следующему элементу во входном TLV .

Метод Next () пропускает текущий элемент во входном TLV и продвигает средство чтения TLVUpdater к следующему элементу, который находится в том же контексте включения. В частности, если считыватель расположен на самом внешнем уровне кодирования TLV , вызов Next () переместит его к следующему, самому верхнему элементу. Если считыватель расположен в элементе контейнера TLV (структуре, массиве или пути), вызов Next () переместит его к следующему элементу-члену контейнера.

Поскольку Next () ограничивает движение считывателя текущим контекстом включения, вызов Next (), когда считыватель позиционируется на элементе контейнера, будет перемещаться по контейнеру, пропуская его элементы-члены (и элементы любых вложенных контейнеров), пока не достигнет первого элемент после контейнера.

Если в конкретном контексте включения нет других элементов, метод Next () вернет ошибку WEAVE_END_OF_TLV, и положение считывателя останется неизменным.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Если считыватель TLVUpdater был успешно размещен на новом элементе.
other
Возвращает коды ошибок Weave или платформы, возвращаемые методами TLVReader :: Skip () и TLVReader :: Next () .

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Ставить

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Ставить

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
)

Установите неявный идентификатор профиля для объекта TLVUpdater.

Этот метод устанавливает неявный идентификатор профиля для объекта TLVUpdater. Когда средство обновления просят кодировать новый элемент, если идентификатор профиля тега, связанного с новым элементом, совпадает со значением profileId, средство обновления закодирует тег в неявной форме, тем самым пропуская идентификатор профиля в процессе.

Подробности
Параметры
[in] profileId
Идентификатор профиля тегов, которые следует закодировать в неявной форме.

StartContainer

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

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)