нл:: Переплетение:: ТЛВ:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
Предоставляет унифицированный интерфейс чтения/записи для редактирования/добавления/удаления элементов в кодировке 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) | |
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) | |
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) |
Общественные функции
КопироватьЭлемент
WEAVE_ERROR CopyElement( TLVReader & reader )
КопироватьЭлемент
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
ДупСтрока
WEAVE_ERROR DupString( char *& buf )
КонечныйКонтейнер
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() .
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
ВыходКонтейнер
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Завершает чтение элемента контейнера TLV и кодирует конец элемента TLV в выходном TLV .
Метод ExitContainer() восстанавливает состояние объекта TLVUpdater после вызова EnterContainer() . Для каждого вызова EnterContainer() приложения должны выполнить соответствующий вызов ExitContainer() , передав значение контекста, возвращаемое методом EnterContainer() .
Когда ExitContainer() возвращает значение, средство чтения TLVUpdater располагается непосредственно перед первым элементом, который следует за контейнером во входном TLV . С этого момента приложения могут вызывать Next() для перемещения по оставшимся элементам.
После вызова EnterContainer() приложения могут вызвать ExitContainer() в средстве обновления в любой момент времени, независимо от того, все ли элементы в базовом контейнере были прочитаны. Также обратите внимание, что вызов ExitContainer() перед чтением всех элементов в контейнере приведет к усечению обновленного контейнера в выходном TLV .
Подробности | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||
Возвращаемые значения |
|
Завершить
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 )
Получить длину
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 и изменения/удаления существующих элементов или добавления новых элементов в кодировку.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
Инициализировать
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
Инициализируйте объект TLVUpdater с помощью TLVReader .
При вызове этого метода данные TLV в буфере, на который указывает TLVReader, перемещаются из текущей точки чтения в конец буфера. Новый частный объект TLVReader инициализируется для чтения из этого нового места, а новый частный объект TLVWriter инициализируется для записи в освобожденное буферное пространство.
Обратите внимание: если TLVReader уже расположен «на» элементе, он сначала возвращается к началу этого элемента. Также обратите внимание, что это отключение хорошо работает с элементами-контейнерами, т. е. если TLVReader уже использовался для вызова EnterContainer() , то отступать нечего. Но если TLVReader был расположен в элементе контейнера и EnterContainer() еще не был вызван, то объект TLVReader перемещается в начало заголовка контейнера.
Входной объект TLVReader будет уничтожен перед возвратом, и приложение не должно использовать его при возврате.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
| ||||||
Возвращаемые значения |
|
Двигаться
WEAVE_ERROR Move( void )
Копирует текущий элемент из входного TLV в выходной TLV .
Метод Move() копирует текущий элемент, на котором находится средство чтения TLVUpdater , в средство записи TLVUpdater . Приложение должно вызвать Next() и разместить считыватель TLVUpdater на элементе перед вызовом этого метода. Как и в случае с методом TLVReader::Next() , если во время вызова средство чтения находится на элементе контейнера, все элементы контейнера будут скопированы. Если средство чтения не позиционировано ни на одном элементе, при вызове этого метода ничего не изменится.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Возвращаемые значения |
|
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_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 , программа обновления закодирует тег в неявной форме, тем самым опуская идентификатор профиля в процессе.
Подробности | |||
---|---|---|---|
Параметры |
|
СтартКонтейнер
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
Верифиендофконтейнер
WEAVE_ERROR VerifyEndOfContainer( void )