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
함수를 제공하여 임의의 소스에서 리더에 데이터를 제공할 수 있습니다(예: 소켓 또는 직렬 포트가 있습니다.
상속
직접 알려진 서브클래스: <ph type="x-smartling-placeholder"></ph> nl::Weave::Profiles::DataManagement_Current::CircularEventReader <ph type="x-smartling-placeholder">
</ph> 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() 메서드를 사용하여 나머지 요소 간에 진행할 수 있습니다.
애플리케이션은 기본 컨테이너의 모든 요소를 읽었는지 여부에 관계없이 언제든지 상위 리더에서 닫기 CloseContainer()를 호출할 수 있습니다. CloseContainer()가 호출된 후 애플리케이션은 컨테이너 리더를 'de-initiald'로 간주해야 합니다. 다시 초기화하지 않고 더 이상 사용해서는 안 됩니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
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() 메서드는 TLV 컨테이너의 구성원 요소 (구조, 배열 또는 경로)를 읽기 시작하도록 현재 TLVReader 객체를 준비합니다. 애플리케이션은 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_texpectedTag) 메서드는 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 )