nl:: Weave:: TLV:: TLVReader
#include <src/lib/core/WeaveTLV.h>
Weave TLV 형식으로 인코딩된 데이터를 위한 메모리 효율적인 파서를 제공합니다.
요약
TLVReader는 Weave TLV 데이터를 위한 정방향 전용 '풀 스타일' 파서를 구현합니다. TLVReader 객체는 TLV 요소 시퀀스를 반복하고 콘텐츠를 해석하는 데 사용할 수 있는 커서로 작동합니다. 요소에 배치되면 애플리케이션은 판독기의 Get() 메서드를 호출하여 현재 요소의 유형과 태그를 쿼리하고 연결된 값을 추출할 수 있습니다. 판독기의 Next() 메서드는 요소에서 요소로 이동하는 데 사용됩니다.
TLVReader 객체는 항상 TLV 요소의 앞, 위 또는 뒤에 배치됩니다. 처음 초기화될 때 TLVReader는 인코딩의 첫 번째 요소 바로 앞에 배치됩니다. 읽기를 시작하려면 애플리케이션에서 Next() 메서드를 최초 호출하여 첫 번째 요소에 리더를 배치해야 합니다. 컨테이너 요소가 구조, 배열 또는 경로에서 만나면 OpenContainer() 또는 EnterContainer() 메서드를 사용하여 컨테이너의 콘텐츠를 반복할 수 있습니다.
판독기가 TLV 인코딩의 끝부분 또는 컨테이너 내의 마지막 요소에 도달하면 Next() 메서드에서 WEAVE_END_OF_TLV 오류를 반환하여 애플리케이션에 신호를 보냅니다. 판독기는 다시 초기화되거나 CloseContainer() / ExitContainer()를 통해 현재 컨테이너가 종료될 때까지 계속 WEAVE_END_OF_TLV를 반환합니다.
TLVReader 객체는 고정된 입력 버퍼나 하나 이상의 PacketBuffer 체인에서 직접 데이터를 파싱할 수 있습니다. 또한 애플리케이션은 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(* 파싱할 추가 TLV 데이터를 검색하는 데 사용할 수 있는 함수입니다. |
공개 속성 |
|
---|---|
AppData
|
void *
애플리케이션별 데이터에 사용할 수 있는 포인터 필드입니다.
|
GetNextBuffer
|
TLVReader 객체의 입력 데이터를 생성할 함수에 대한 포인터입니다.
|
ImplicitProfileId
|
uint32_t
암시적 형식으로 인코딩된 프로필 태그에 사용할 프로필 ID입니다.
|
보호된 속성 |
|
---|---|
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)
|
OpenContainer() 호출 후 TLV 컨테이너 읽기를 완료합니다.
|
DupBytes(uint8_t *& buf, uint32_t & dataLen)
|
현재 바이트 또는 UTF8 문자열의 값이 포함된 버퍼를 할당하고 반환합니다.
|
DupString(char *& buf)
|
현재 바이트 또는 UTF8 문자열의 null로 끝나는 값을 포함하는 버퍼를 할당하고 반환합니다.
|
EnterContainer(TLVType & outerContainerType)
|
|
ExitContainer(TLVType outerContainerType)
|
|
Get(bool & v)
|
현재 요소의 값을 부울 유형으로 가져옵니다.
|
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 문자열 요소의 값을 null로 종료된 문자열로 가져옵니다.
|
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
단일 PacketBuffer에서 읽도록 TLVReader 객체를 초기화합니다.
|
Init(PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers)
|
void
하나 이상의 PacketBuffer에서 읽도록 TLVReader 객체를 초기화합니다.
|
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
mControlByte에서 TLVElementType을 반환하는 비공개 메서드입니다.
|
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 유형 정의를 참고하세요.
ImplicitProfileId
uint32_t ImplicitProfileId
암시적 형식으로 인코딩된 프로필 태그에 사용할 프로필 ID입니다.
리더가 암시적 형식으로 인코딩된 프로필별 태그를 발견하면 ImplicitProfileId
속성의 값을 태그의 가정된 프로필 ID로 사용합니다.
기본적으로 ImplicitProfileId
속성은 kProfileIdNotSpecified로 설정됩니다. 암시적으로 인코딩된 태그가 포함된 TLV를 디코딩하는 경우 애플리케이션은 이러한 태그가 있는 TLV 요소를 읽기 전에 ImplicitProfileId
를 설정해야 합니다. 적절한 프로필 ID는 일반적으로 말하는 애플리케이션이나 프로토콜의 컨텍스트에 따라 달라집니다.
ImplicitProfileId
가 kProfileIdNotSpecified로 설정된 상태에서 암시적으로 인코딩된 태그가 발생하면 리더에서 WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG 오류를 반환합니다.
보호된 속성
mBufEnd
const uint8_t * mBufEnd
mBufHandle
uintptr_t mBufHandle
mContainerType
TLVType mContainerType
mControlByte
uint16_t mControlByte
mElemLenOrVal
uint64_t mElemLenOrVal
mElemTag
uint64_t mElemTag
mLenRead
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
공개 함수
CloseContainer
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
OpenContainer() 호출 후 TLV 컨테이너 읽기를 완료합니다.
CloseContainer() 메서드는 OpenContainer()를 호출한 후 상위 TLVReader 객체의 상태를 복원합니다. OpenContainer()를 호출할 때마다 애플리케이션은 CloseContainer()를 각각 호출하여 동일한 컨테이너 리더에 대한 참조를 두 메서드에 모두 전달해야 합니다.
CloseContainer()가 반환되면 상위 판독기는 컨테이너 뒤에 오는 첫 번째 요소 바로 앞에 배치됩니다. 이 시점부터 애플리케이션은 Next() 메서드를 사용하여 나머지 요소를 진행할 수 있습니다.
애플리케이션은 기본 컨테이너의 모든 요소를 읽었는지 여부에 관계없이 언제든지 상위 리더에 대해 close CloseContainer()를 호출할 수 있습니다. CloseContainer()가 호출되면 애플리케이션은 컨테이너 리더를 'de-initialized'(초기화가 초기화됨)로 간주해야 하며 다시 초기화하지 않고는 더 이상 컨테이너 리더를 사용해서는 안 됩니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
현재 바이트 또는 UTF8 문자열의 값이 포함된 버퍼를 할당하고 반환합니다.
이 메서드는 현재 위치의 바이트 또는 UTF-8 문자열 요소와 연결된 데이터의 버퍼를 만들고 데이터 사본을 반환합니다. 버퍼의 메모리는 malloc()으로 획득되며 더 이상 필요하지 않은 호출자는 free()를 사용하여 해제해야 합니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
DupString
WEAVE_ERROR DupString( char *& buf )
현재 바이트 또는 UTF8 문자열의 null로 끝나는 값을 포함하는 버퍼를 할당하고 반환합니다.
이 메서드는 현재 위치의 바이트 또는 UTF-8 문자열 요소와 연결된 데이터의 버퍼를 만들고 null로 끝나는 사본을 반환합니다. 버퍼의 메모리는 malloc()으로 획득되며 더 이상 필요하지 않은 호출자는 free()를 사용하여 해제해야 합니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
EnterContainer
WEAVE_ERROR EnterContainer( TLVType & outerContainerType )
TLV 컨테이너 요소의 멤버를 읽기 위한 TLVReader 객체를 준비합니다.
EnterContainer() 메서드는 현재 TLVReader 객체를 준비하여 TLV 컨테이너의 멤버 요소 (구조, 배열 또는 경로)를 읽기 시작합니다. EnterContainer()를 호출할 때마다 애플리케이션에서 ExitContainer()를 호출해야 합니다.
EnterContainer()가 호출되면 TLVReader 객체가 읽을 컨테이너 요소에 배치되어야 합니다. 이 메서드는 TLVType 값에 대한 참조를 인수로 사용합니다. 이 참조는 컨테이너를 읽는 동안 리더의 컨텍스트를 저장하는 데 사용됩니다.
EnterContainer() 메서드가 반환되면 판독기가 컨테이너의 첫 번째 멤버 바로 앞에 배치됩니다. Next()를 반복적으로 호출하면 끝에 도달할 때까지 컬렉션의 멤버를 통해 판독기를 진행하며 이때 판독기는 WEAVE_END_OF_TLV를 반환합니다.
애플리케이션이 컨테이너 읽기를 완료한 후에는 ExitContainer() 메서드를 호출하여 컨테이너 이후의 요소를 계속 읽을 수 있습니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
TLV 컨테이너 읽기를 완료하고 컨테이너 이후의 요소를 읽을 수 있도록 TLVReader 객체를 준비합니다.
ExitContainer() 메서드는 EnterContainer() 호출 후 TLVReader 객체의 상태를 복원합니다. EnterContainer()를 호출할 때마다 애플리케이션은 ExitContainer()를 호출하고 EnterContainer() 메서드에서 반환된 컨텍스트 값을 전달해야 합니다.
ExitContainer()가 반환되면 판독기는 컨테이너 뒤에 오는 첫 번째 요소 바로 앞에 배치됩니다. 이 시점부터 애플리케이션은 Next() 메서드를 사용하여 나머지 요소를 진행할 수 있습니다.
EnterContainer()가 호출되면 애플리케이션은 기본 컨테이너의 모든 요소를 읽었는지 여부와 관계없이 언제든지 리더에서 ExitContainer()를 호출할 수 있습니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
가져오기
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 )
GetBufHandle
uintptr_t GetBufHandle( void ) const
GetBytes
WEAVE_ERROR GetBytes( uint8_t *buf, uint32_t bufSize )
현재 바이트 또는 UTF8 문자열 요소의 값을 가져옵니다.
필요한 입력 버퍼 크기를 확인하려면 GetBytes()를 호출하기 전에 GetLength() 메서드를 호출합니다.
세부정보 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||
반환 값 |
|
GetContainerType
TLVType GetContainerType( void ) const
GetControlByte
uint16_t GetControlByte( void ) const
GetDataPtr
WEAVE_ERROR GetDataPtr( const uint8_t *& data )
TLV 바이트 또는 UTF8 문자열 요소의 초기 인코딩된 바이트를 가리키는 포인터를 가져옵니다.
이 메서드는 기본 입력 버퍼 내의 인코딩된 문자열 값을 직접 포인터로 반환합니다. 이 메서드가 성공하려면 문자열 값 전체가 단일 버퍼에 있어야 합니다. 그렇지 않으면 메서드가 WEAVE_ERROR_TLV_UNDERRUN을 반환합니다. 따라서 인접하지 않은 여러 버퍼에서 데이터를 읽을 때 메서드의 사용이 제한됩니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||
반환 값 |
|
GetLength
uint32_t GetLength( void ) const
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 문자열 요소의 값을 null로 종료된 문자열로 가져옵니다.
필요한 입력 버퍼 크기를 확인하려면 GetBytes()를 호출하기 전에 GetLength() 메서드를 호출합니다. null 문자를 수용하려면 입력 버퍼가 문자열 길이보다 1바이트 이상 커야 합니다.
세부정보 | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||
반환 값 |
|
GetTag
uint64_t GetTag( void ) const
현재 TLV 요소와 연결된 태그를 반환합니다.
GetTag()에서 반환된 값은 태그 유틸리티 함수 (IsProfileTag(), IsContextTag(), ProfileIdFromTag() 등)와 함께 태그 유형을 확인하고 다양한 태그 필드 값을 추출하는 데 사용할 수 있습니다.
세부정보 | |
---|---|
반환 |
현재 TLV 요소와 연결된 태그에 대한 정보를 포함하는 부호 없는 정수입니다.
|
GetType
TLVType GetType( void ) const
Init
void Init( const TLVReader & aReader )
Init
void Init( const uint8_t *data, uint32_t dataLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen )
Init
void Init( PacketBuffer *buf, uint32_t maxLen, bool allowDiscontiguousBuffers )
하나 이상의 PacketBuffer에서 읽도록 TLVReader 객체를 초기화합니다.
파싱은 초기 버퍼의 시작 위치 (buf->DataStart())에서 시작됩니다. allowDiscontiguousBuffers가 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(TLVTypeexpectedType, uint64_t neededTag) 메서드는 Next()와 동작이 같지만 새 TLV 요소의 유형과 태그가 제공된 인수와 일치하는지 확인하는 편의 메서드입니다.
세부정보 | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||||||
반환 값 |
|
OpenContainer
WEAVE_ERROR OpenContainer( TLVReader & containerReader )
TLV 컨테이너 요소의 멤버를 읽기 위한 새 TLVReader 객체를 초기화합니다.
OpenContainer() 메서드는 TLV 컨테이너의 멤버 요소 (구조, 배열 또는 경로)를 읽기 위한 새 TLVReader 객체를 초기화합니다. OpenContainer()가 호출되면 현재 TLVReader 객체가 읽을 컨테이너 요소에 위치해야 합니다. 이 메서드는 단독 인수로 컨테이너를 읽도록 초기화되는 새 판독기에 대한 참조를 취합니다. 이 판독기는 컨테이너 리더라고 하며, OpenContainer()가 호출되는 판독기는 상위 리더라고 합니다.
OpenContainer() 메서드가 반환되면 컨테이너 리더가 컨테이너의 첫 번째 멤버 바로 앞에 배치됩니다. 컨테이너 리더에서 Next()를 호출하면 끝에 도달할 때까지 컬렉션의 멤버를 진행합니다. 종료 시점에 판독기는 WEAVE_END_OF_TLV를 반환합니다.
컨테이너 리더가 열려 있는 동안 애플리케이션은 상위 리더의 상태를 호출하거나 다른 방식으로 변경해서는 안 됩니다. 애플리케이션에서 컨테이너 리더의 사용이 완료되면 상위 리더에서 CloseContainer()를 호출하고 컨테이너 리더를 인수로 전달하여 컨테이너를 닫아야 합니다. 애플리케이션은 기본 컨테이너에 포함된 모든 요소를 읽거나 읽지 않은 상태에서 언제든지 컨테이너 리더를 닫을 수 있습니다. 컨테이너 리더가 닫힌 후에도 애플리케이션에서 상위 리더를 계속 사용할 수 있습니다.
컨테이너 리더는 상위 리더에서 다양한 구성 속성을 상속합니다. 다음과 같습니다.
- 암시적 프로필 ID (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
mControlByte에서 TLVElementType을 반환하는 비공개 메서드입니다.
EnsureData
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
이는 TLV 요소 헤드의 길이를 계산하는 데 사용되는 비공개 메서드입니다.
IsContainerOpen
bool IsContainerOpen( void ) const
ReadData
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 )
SkipData
WEAVE_ERROR SkipData( void )
대상 버퍼 없이 현재 TLV에 포함된 데이터를 판독하여 건너뜁니다.
세부정보 | |||||
---|---|---|---|---|---|
반환 값 |
|
SkipToEndOfContainer
WEAVE_ERROR SkipToEndOfContainer( void )
VerifyElement
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 )