нл:: Переплетение:: ТЛВ:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Обеспечивает эффективный анализатор данных, закодированных в формате Weave TLV .
Краткое содержание
TLVReader реализует анализатор данных Weave TLV , работающий только в прямом направлении. Объект TLVReader действует как курсор, который можно использовать для перебора последовательности элементов TLV и интерпретации их содержимого. При размещении на элементе приложения могут вызывать методы Get() средства чтения для запроса типа и тега текущего элемента, а также для извлечения любого связанного значения. Метод читателя Next() используется для перехода от элемента к элементу.
Объект TLVReader всегда располагается до, после или над элементом TLV . При первой инициализации TLVReader располагается непосредственно перед первым элементом кодировки. Чтобы начать чтение, приложение должно выполнить первоначальный вызов метода Next() , чтобы расположить средство чтения на первом элементе. Когда элемент контейнера встречается в структуре, массиве или пути, методы OpenContainer() или EnterContainer() могут использоваться для перебора содержимого контейнера.
Когда средство чтения достигает конца кодировки TLV или последнего элемента в контейнере, оно сигнализирует приложению, возвращая ошибку WEAVE_END_OF_TLV из метода Next() . Средство чтения будет продолжать возвращать WEAVE_END_OF_TLV до тех пор, пока оно не будет повторно инициализировано или пока не будет завершен выход из текущего контейнера (через CloseContainer() / ExitContainer() ).
Объект TLVReader может анализировать данные непосредственно из фиксированного входного буфера или из цепочки из одного или нескольких PacketBuffers. Кроме того, приложения могут предоставлять функцию GetNextBuffer
для передачи данных считывателю из произвольного источника, например сокета или последовательного порта.
Наследование
Прямые известные подклассы:nl::Weave::Profiles::DataManagement_Current::CircularEventReader
nl::Weave::TLV::CircularTLVReader
Публичные типы | |
---|---|
GetNextBufferFunct )(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen) | WEAVE_ERROR(*WEAVE_ERROR (* Функция, которую можно использовать для получения дополнительных данных TLV для анализа. |
Публичные атрибуты | |
---|---|
AppData | void * Поле указателя, которое можно использовать для данных, специфичных для приложения. |
GetNextBuffer | Указатель на функцию, которая будет создавать входные данные для объекта TLVReader . |
ImplicitProfileId | uint32_t Идентификатор профиля, который будет использоваться для тегов профиля, закодированных в неявной форме. |
Защищенные атрибуты | |
---|---|
mBufEnd | const uint8_t * |
mBufHandle | uintptr_t |
mContainerType | |
mControlByte | uint16_t |
mElemLenOrVal | uint64_t |
mElemTag | uint64_t |
mLenRead | uint32_t |
mMaxLen | uint32_t |
mReadPoint | const uint8_t * |
Общественные функции | |
---|---|
CloseContainer ( TLVReader & containerReader) | Завершает чтение TLV- контейнера после вызова OpenContainer() . |
DupBytes (uint8_t *& buf, uint32_t & dataLen) | Выделяет и возвращает буфер, содержащий значение текущего байта или строки UTF8. |
DupString (char *& buf) | Выделяет и возвращает буфер, содержащий значение текущего байта или строки UTF8, завершающееся нулем. |
EnterContainer ( TLVType & outerContainerType) | |
ExitContainer ( TLVType outerContainerType) | |
Get (bool & v) | Получите значение текущего элемента как тип bool. |
Get (int8_t & v) | Получите значение текущего элемента как 8-битное целое число со знаком. |
Get (int16_t & v) | Получите значение текущего элемента как 16-битное целое число со знаком. |
Get (int32_t & v) | Получите значение текущего элемента как 32-битное целое число со знаком. |
Get (int64_t & v) | Получите значение текущего элемента как 64-битное целое число со знаком. |
Get (uint8_t & v) | Получите значение текущего элемента как 8-битное целое число без знака. |
Get (uint16_t & v) | Получите значение текущего элемента как 16-битное целое число без знака. |
Get (uint32_t & v) | Получите значение текущего элемента как 32-битное целое число без знака. |
Get (uint64_t & v) | Получите значение текущего элемента как 64-битное целое число без знака. |
Get (float & v) | |
Get (double & v) | Получите значение текущего элемента как число двойной точности с плавающей запятой. |
GetBufHandle (void) const | uintptr_t |
GetBytes (uint8_t *buf, uint32_t bufSize) | Получите значение текущего байта или строкового элемента UTF8. |
GetContainerType (void) const | Возвращает тип контейнера, внутри которого в данный момент читает TLVReader . |
GetControlByte (void) const | uint16_t Возвращает управляющий байт, связанный с текущим элементом TLV . |
GetDataPtr (const uint8_t *& data) | Получите указатель на начальный закодированный байт байта TLV или строкового элемента UTF8. |
GetLength (void) const | uint32_t Возвращает длину данных, связанных с текущим элементом TLV . |
GetLengthRead (void) const | uint32_t Возвращает общее количество байтов, прочитанных с момента инициализации средства чтения. |
GetReadPoint (void) const | const uint8_t * Получает точку в базовом входном буфере, соответствующую текущей позиции средства чтения. |
GetRemainingLength (void) const | uint32_t Возвращает общее количество байтов, которые можно прочитать, пока не будет достигнута максимальная длина чтения. |
GetString (char *buf, uint32_t bufSize) | Получите значение текущего байта или строкового элемента UTF8 в виде строки, завершающейся нулем. |
GetTag (void) const | uint64_t Возвращает тег, связанный с текущим элементом TLV . |
GetType (void) const | Возвращает тип текущего элемента TLV . |
Init (const TLVReader & aReader) | void |
Init (const uint8_t *data, uint32_t dataLen) | void Инициализирует объект TLVReader для чтения из одного входного буфера. |
Init ( PacketBuffer *buf, uint32_t maxLen) | void Инициализирует объект TLVReader для чтения из одного PacketBuffer. |
Init ( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers) | void Инициализирует объект TLVReader для чтения из одного или нескольких PacketBuffers. |
Next (void) | |
Next ( TLVType expectedType, uint64_t expectedTag) | |
OpenContainer ( TLVReader & containerReader) | |
Skip (void) | |
VerifyEndOfContainer (void) | Проверяет, что объект TVLReader находится в конце контейнера TLV . |
Защищенные функции | |
---|---|
ClearElementState (void) | void Очистите состояние TLVReader . |
ElementType (void) const | TLVElementType Это закрытый метод, который возвращает TLVElementType из mControlByte. |
EnsureData ( WEAVE_ERROR noDataErr) | |
GetElementHeadLength (uint8_t & elemHeadBytes) const | Это частный метод, используемый для вычисления длины заголовка элемента TLV . |
IsContainerOpen (void) const | bool |
ReadData (uint8_t *buf, uint32_t len) | |
ReadElement (void) | |
ReadTag (TLVTagControl tagControl, const uint8_t *& p) | uint64_t |
SetContainerOpen (bool aContainerOpen) | void |
SkipData (void) | Пропустите любые данные, содержащиеся в текущем TLV , прочитав их без буфера назначения. |
SkipToEndOfContainer (void) | |
VerifyElement (void) |
Защищенные статические функции | |
---|---|
FailGetNextBuffer ( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen) | |
GetNextPacketBuffer ( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen) |
Публичные типы
GetNextBufferFunct
WEAVE_ERROR(* GetNextBufferFunct)(TLVReader &reader, uintptr_t &bufHandle, const uint8_t *&bufStart, uint32_t &bufLen)
Функция, которую можно использовать для получения дополнительных данных TLV для анализа.
Функции этого типа используются для подачи входных данных в TLVReader . Ожидается, что при вызове функция создаст дополнительные данные для считывателя для анализа или сообщит читателю, что данных больше нет.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||
Возвращаемые значения |
|
Публичные атрибуты
AppData
void * AppData
Поле указателя, которое можно использовать для данных, специфичных для приложения.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
Указатель на функцию, которая будет создавать входные данные для объекта TLVReader .
Если установлено значение NULL (значение по умолчанию), считыватель будет считать, что дальнейшие входные данные недоступны.
GetNextBuffer может быть установлен приложением в любое время, но обычно он устанавливается при инициализации средства чтения.
Дополнительную информацию о реализации функции GetNextBuffer см. в определении типа GetNextBufferFunct.
Неявныйпрофилеид
uint32_t ImplicitProfileId
Идентификатор профиля, который будет использоваться для тегов профиля, закодированных в неявной форме.
Когда средство чтения встречает тег, специфичный для профиля, который был закодирован в неявной форме, оно использует значение свойства ImplicitProfileId
в качестве предполагаемого идентификатора профиля для тега.
По умолчанию для свойства ImplicitProfileId
установлено значение kProfileIdNotSpecified. При декодировании TLV , содержащего неявно закодированные теги, приложения должны установить ImplicitProfileId
перед чтением любых элементов TLV , имеющих такие теги. Соответствующий идентификатор профиля обычно зависит от контекста используемого приложения или протокола.
Если встречается неявно закодированный тег, когда для ImplicitProfileId
установлено значение kProfileIdNotSpecified, средство чтения вернет ошибку WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG .
Защищенные атрибуты
mBufEnd
const uint8_t * mBufEnd
мбуфхандле
uintptr_t mBufHandle
мконтейнертипе
TLVType mContainerType
mControlByte
uint16_t mControlByte
МЭлемЛенОрВал
uint64_t mElemLenOrVal
МелемТаг
uint64_t mElemTag
mLenRead
uint32_t mLenRead
мМаксЛен
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
Общественные функции
ЗакрытьКонтейнер
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
Завершает чтение TLV- контейнера после вызова OpenContainer() .
Метод CloseContainer() восстанавливает состояние родительского объекта TLVReader после вызова OpenContainer() . Для каждого вызова OpenContainer() приложения должны выполнить соответствующий вызов CloseContainer() , передав ссылку на один и тот же модуль чтения контейнера обоим методам.
Когда CloseContainer() возвращает значение, родительский модуль чтения располагается непосредственно перед первым элементом, следующим за контейнером. С этого момента приложение может использовать метод Next() для перемещения по оставшимся элементам.
Приложения могут вызвать close CloseContainer() для родительского средства чтения в любой момент времени, независимо от того, все ли элементы в базовом контейнере были прочитаны. После вызова CloseContainer() приложение должно считать средство чтения контейнера «деинициализированным» и не должно использовать его дальше без его повторной инициализации.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||||
Возвращаемые значения |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
Выделяет и возвращает буфер, содержащий значение текущего байта или строки UTF8.
Этот метод создает буфер и возвращает копию данных, связанных с байтовым или строковым элементом UTF-8 в текущей позиции. Память для буфера получается с помощью malloc() и должна быть освобождена с помощью free() вызывающей стороной, когда она больше не нужна.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||||
Возвращаемые значения |
|
ДупСтрока
WEAVE_ERROR DupString( char *& buf )
Выделяет и возвращает буфер, содержащий значение текущего байта или строки UTF8, завершающееся нулем.
Этот метод создает буфер и возвращает копию данных с нулевым завершением, связанных с байтовым или строковым элементом UTF-8 в текущей позиции. Память для буфера получается с помощью malloc() и должна быть освобождена с помощью free() вызывающей стороной, когда она больше не нужна.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||||
Возвращаемые значения |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
Подготавливает объект TLVReader для чтения членов элемента контейнера TLV .
Метод EnterContainer() подготавливает текущий объект TLVReader к началу чтения элементов-членов контейнера TLV (структуры, массива или пути). Для каждого вызова EnterContainer() приложения должны выполнить соответствующий вызов ExitContainer() .
При вызове EnterContainer() объект TLVReader должен располагаться на элементе контейнера, который необходимо прочитать. Метод принимает в качестве аргумента ссылку на значение TLVType, которое будет использоваться для сохранения контекста средства чтения во время чтения контейнера.
Когда метод EnterContainer() возвращает значение, средство чтения располагается непосредственно перед первым элементом контейнера. Повторный вызов Next() будет продвигать средство чтения по элементам коллекции до тех пор, пока не будет достигнут конец, после чего средство чтения вернет WEAVE_END_OF_TLV.
Как только приложение завершит чтение контейнера, оно может продолжить чтение элементов после контейнера, вызвав метод ExitContainer() .
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
ВыходКонтейнер
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
Завершает чтение контейнера TLV и подготавливает объект TLVReader для чтения элементов после контейнера.
Метод ExitContainer() восстанавливает состояние объекта TLVReader после вызова EnterContainer() . Для каждого вызова EnterContainer() приложения должны выполнить соответствующий вызов ExitContainer() , передав значение контекста, возвращаемое методом EnterContainer() .
Когда ExitContainer() возвращает значение, средство чтения располагается непосредственно перед первым элементом, следующим за контейнером. С этого момента приложение может использовать метод Next() для перемещения по оставшимся элементам.
После вызова EnterContainer() приложения могут вызвать ExitContainer() для средства чтения в любой момент времени, независимо от того, все ли элементы в базовом контейнере были прочитаны.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( bool & v )
Получите значение текущего элемента как тип bool.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( int8_t & v )
Получите значение текущего элемента как 8-битное целое число со знаком.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( int16_t & v )
Получите значение текущего элемента как 16-битное целое число со знаком.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( int32_t & v )
Получите значение текущего элемента как 32-битное целое число со знаком.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( int64_t & v )
Получите значение текущего элемента как 64-битное целое число со знаком.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( uint8_t & v )
Получите значение текущего элемента как 8-битное целое число без знака.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено. Аналогично, если закодированное целочисленное значение отрицательное, оно будет преобразовано в беззнаковое.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( uint16_t & v )
Получите значение текущего элемента как 16-битное целое число без знака.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено. Аналогично, если закодированное целочисленное значение отрицательное, оно будет преобразовано в беззнаковое.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( uint32_t & v )
Получите значение текущего элемента как 32-битное целое число без знака.
Если закодированное целочисленное значение больше типа выходных данных, результирующее значение будет усечено. Аналогично, если закодированное целочисленное значение отрицательное, оно будет преобразовано в беззнаковое.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( uint64_t & v )
Получите значение текущего элемента как 64-битное целое число без знака.
Если закодированное целочисленное значение отрицательное, оно будет преобразовано в беззнаковое.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Получать
WEAVE_ERROR Get( float & v )
Получать
WEAVE_ERROR Get( double & v )
Получите значение текущего элемента как число двойной точности с плавающей запятой.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
Получите значение текущего байта или строкового элемента UTF8.
Чтобы определить необходимый размер входного буфера, вызовите метод GetLength() перед вызовом GetBytes() .
Подробности | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||
Возвращаемые значения |
|
GetContainerType
TLVType GetContainerType( void ) const
Возвращает тип контейнера, внутри которого в данный момент читает TLVReader .
Метод GetContainerType() возвращает тип контейнера TLV , внутри которого читает TLVReader . Если TLVReader расположен на самом внешнем уровне кодировки TLV (т. е. до, после или после самого внешнего элемента TLV ), метод вернет kTLVType_NotSpecified.
Подробности | |
---|---|
Возврат | TLVType текущего контейнера или kTLVType_NotSpecified, если TLVReader не расположен внутри контейнера. |
GetControlByte
uint16_t GetControlByte( void ) const
Возвращает управляющий байт, связанный с текущим элементом TLV .
В идеале никто никогда не должен знать об управляющем байте, и доступ к нему должна иметь только внутренняя реализация TLV . Но, тем не менее, доступ к управляющему байту полезен для целей отладки с помощью утилит отладки TLV (которые пытаются декодировать управляющий байт тега при печати содержимого буфера TLV ).
Подробности | |
---|---|
Возврат | Целое число без знака, содержащее управляющий байт, связанный с текущим элементом TLV . kTLVControlByte_NotSpecified возвращается, если средство чтения не позиционировано на элементе. |
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
Получите указатель на начальный закодированный байт байта TLV или строкового элемента UTF8.
Этот метод возвращает прямой указатель на закодированное строковое значение в базовом входном буфере. Для достижения успеха метод требует, чтобы все строковое значение присутствовало в одном буфере. В противном случае метод возвращает WEAVE_ERROR_TLV_UNDERRUN . Это делает метод ограниченным в использовании при чтении данных из нескольких несмежных буферов.
Подробности | |||||||||
---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||
Возвращаемые значения |
|
Получить длину
uint32_t GetLength( void ) const
Возвращает длину данных, связанных с текущим элементом TLV .
Длина данных применяется только к элементам типа строки UTF8 или строки байтов. Для строк UTF8 возвращаемое значение — это количество байтов в строке, а не количество символов.
Подробности | |
---|---|
Возврат | Длина (в байтах) данных, связанных с текущим элементом TLV , или 0, если текущий элемент не является строкой UTF8 или строкой байтов, или если средство чтения не позиционировано на элементе. |
GetLengthRead
uint32_t GetLengthRead( void ) const
Возвращает общее количество байтов, прочитанных с момента инициализации средства чтения.
Подробности | |
---|---|
Возврат | Общее количество байтов, прочитанных с момента инициализации устройства чтения. |
GetReadPoint
const uint8_t * GetReadPoint( void ) const
Получает точку в базовом входном буфере, соответствующую текущей позиции средства чтения.
Подробности | |
---|---|
Возврат | Указатель на базовый входной буфер, соответствующий текущей позиции средства чтения. |
GetRemainingLength
uint32_t GetRemainingLength( void ) const
Возвращает общее количество байтов, которые можно прочитать, пока не будет достигнута максимальная длина чтения.
Подробности | |
---|---|
Возврат | Общее количество байтов, которые можно прочитать, пока не будет достигнута максимальная длина чтения. |
GetString
WEAVE_ERROR GetString( char *buf, uint32_t bufSize )
Получите значение текущего байта или строкового элемента UTF8 в виде строки, завершающейся нулем.
Чтобы определить необходимый размер входного буфера, вызовите метод GetLength() перед вызовом GetBytes() . Входной буфер должен быть как минимум на один байт больше длины строки, чтобы вместить нулевой символ.
Подробности | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||
Возвращаемые значения |
|
GetTag
uint64_t GetTag( void ) const
Возвращает тег, связанный с текущим элементом TLV .
Значение, возвращаемое GetTag(), можно использовать с служебными функциями тегов ( IsProfileTag() , IsContextTag() , ProfileIdFromTag() и т. д.) для определения типа тега и извлечения различных значений полей тега.
Подробности | |
---|---|
Возврат | Целое число без знака, содержащее информацию о теге, связанном с текущим элементом TLV . |
GetType
TLVType GetType( void ) const
Инициализировать
void Init( const TLVReader & aReader )
Инициализировать
void Init( const uint8_t *data, uint32_t dataLen )
Инициализировать
void Init( PacketBuffer *buf, uint32_t maxLen )
Инициализирует объект TLVReader для чтения из одного PacketBuffer.
Анализ начинается с начальной позиции буфера (buf->DataStart()) и продолжается до тех пор, пока не закончатся данные в буфере (как обозначено buf->Datalen()) или не будут проанализированы байты maxLen.
Подробности | |||||
---|---|---|---|---|---|
Параметры |
|
Инициализировать
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
Инициализирует объект TLVReader для чтения из одного или нескольких PacketBuffers.
Анализ начинается с начальной позиции исходного буфера (buf->DataStart()). Если параметрallowDiscontigiousBuffers имеет значение true, читатель будет продвигаться по цепочке буферов, связанных указателями Next() . Анализ продолжается до тех пор, пока все данные в цепочке буферов не будут использованы (как обозначено buf->Datalen()) или пока не будут проанализированы байты maxLen.
Подробности | |||||||
---|---|---|---|---|---|---|---|
Параметры |
|
Следующий
WEAVE_ERROR Next( void )
Перемещает объект TLVReader к следующему элементу TLV для чтения.
Метод Next() позиционирует объект чтения на следующем элементе в кодировке TLV , который находится в том же контексте включения. В частности, если средство чтения расположено на самом внешнем уровне кодировки TLV , вызов Next() переместит средство чтения к следующему, самому верхнему элементу. Если средство чтения расположено внутри элемента контейнера TLV (структуры, массива или пути), вызов Next() переместит средство чтения к следующему элементу-члену контейнера.
Поскольку Next() ограничивает движение читателя текущим контекстом содержания, вызов Next() , когда читатель располагается на элементе контейнера, будет перемещаться по контейнеру, пропуская его элементы-члены (и элементы любых вложенных контейнеров), пока не достигнет первого элемент после контейнера.
Если в определенном контексте включения больше нет элементов, метод Next() вернет ошибку WEAVE_END_OF_TLV , а позиция считывателя останется неизменной.
Подробности | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Возвращаемые значения |
|
Следующий
WEAVE_ERROR Next( TLVType expectedType, uint64_t expectedTag )
Перемещает объект TLVReader к следующему читаемому элементу TLV , утверждая тип и тег нового элемента.
Метод Next(TLVType ожидаемый тип, uint64_t ожидаемый тег) — это удобный метод, который имеет то же поведение, что и Next() , но также проверяет, соответствуют ли тип и тег нового элемента TLV предоставленным аргументам.
Подробности | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Параметры |
| ||||||||||||||||
Возвращаемые значения |
|
ОпенКонтейнер
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
Инициализирует новый объект TLVReader для чтения членов элемента контейнера TLV .
Метод OpenContainer() инициализирует новый объект TLVReader для чтения элементов-членов контейнера TLV (структуры, массива или пути). При вызове OpenContainer() текущий объект TLVReader должен располагаться на читаемом элементе контейнера. В качестве единственного аргумента метод принимает ссылку на новую программу чтения, которая будет инициализирована для чтения контейнера. Это средство чтения называется средством чтения контейнера , а средство чтения, в котором вызывается OpenContainer(), называется родительским средством чтения .
Когда метод OpenContainer() возвращает значение, средство чтения контейнера располагается непосредственно перед первым элементом контейнера. Вызов Next() в средстве чтения контейнера будет перемещаться по элементам коллекции до тех пор, пока не будет достигнут конец, после чего средство чтения вернет WEAVE_END_OF_TLV.
Пока средство чтения контейнера открыто, приложения не должны выполнять вызовы или иным образом изменять состояние родительского средства чтения. Как только приложение завершило использование средства чтения контейнера, оно должно закрыть его, вызвав CloseContainer() для родительского средства чтения, передав средство чтения контейнера в качестве аргумента. Приложения могут закрыть средство чтения контейнера в любой момент, прочитав или не прочитав все элементы, содержащиеся в базовом контейнере. После закрытия средства чтения контейнера приложения могут продолжать использовать родительское средство чтения.
Средство чтения контейнера наследует различные свойства конфигурации от родительского средства чтения. Это:
- Неявный идентификатор профиля (ImplicitProfileId).
- Указатель данных приложения (AppData)
- Указатель функции GetNextBuffer
Подробности | |||||
---|---|---|---|---|---|
Параметры |
| ||||
Возвращаемые значения |
|
Пропускать
WEAVE_ERROR Skip( void )
Перемещает объект TLVReader сразу после текущего элемента TLV .
Метод Skip() размещает объект чтения сразу после текущего элемента TLV , так что последующий вызов Next() переместит средство чтения к следующему элементу. Как и в случае с Next() , если во время вызова средство чтения находится на элементе контейнера, члены контейнера будут пропущены. Если средство чтения не позиционировано ни на каком элементе, его положение остается неизменным.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Возвращаемые значения |
|
VerifyendofContainer
WEAVE_ERROR VerifyEndOfContainer( void )
Проверяет, что объект TVLreader находится в конце контейнера TLV .
Метод VerifyEndOfContainer () проверяет, что в текущем контейнере TLV нет дополнительных элементов TLV . Это удобный метод, который эквивалентен вызову next () и проверки возврата значения Weave_end_of_tlv.
Подробности | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Возвращаемые значения |
|
Защищенные функции
ClearElementState
void ClearElementState( void )
Elementtype
TLVElementType ElementType( void ) const
Это частный метод, который возвращает tlvementtype из Mcontrolbyte.
Гарантированная
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
Это частный метод, используемый для вычисления длины головки элемента TLV .
IscontaineRopen
bool IsContainerOpen( void ) const
Риддата
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
Readtag
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
SetContaineroPen
void SetContainerOpen( bool aContainerOpen )
Скипдата
WEAVE_ERROR SkipData( void )
Пропустите любые данные, содержащиеся в текущем TLV , прочитав его без буфера назначения.
Подробности | |||||
---|---|---|---|---|---|
Возвращаемые значения |
|
Skiptoendofcontainer
WEAVE_ERROR SkipToEndOfContainer( void )
Проверка
WEAVE_ERROR VerifyElement( void )
Защищенные статические функции
FailgetNextBuffer
WEAVE_ERROR FailGetNextBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )
GetNextPacketBuffer
WEAVE_ERROR GetNextPacketBuffer( TLVReader & reader, uintptr_t & bufHandle, const uint8_t *& bufStart, uint32_t & bufLen )