nl:: 매트:: 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에 피드하는 데 사용됩니다. 함수를 호출하면 함수가 더 이상 사용할 수 있는 데이터가 없음을 독자가 파싱하거나 알리기 위해 추가 데이터를 생성해야 합니다.
세부정보 | |||||||||
---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||
반환 값 |
|
공개 속성
앱 데이터
void * AppData
애플리케이션별 데이터에 사용할 수 있는 포인터 필드입니다.
GetNextBuffer
GetNextBufferFunct GetNextBuffer
TLVReader 객체에 입력 데이터를 생성할 함수에 대한 포인터입니다.
NULL (기본값)로 설정하면 리더는 추가 입력 데이터를 사용할 수 없다고 가정합니다.
GetNextBuffer는 언제든지 애플리케이션에서 설정할 수 있지만 일반적으로 리더가 초기화될 때 설정됩니다.
GetNextBuffer 함수 구현에 관한 자세한 내용은 GetNextBufferFunct 유형 정의를 참고하세요.
암시적 프로필 ID
uint32_t ImplicitProfileId
암시적 형식으로 인코딩된 프로필 태그에 사용할 프로필 ID입니다.
리더가 암시적 형식으로 인코딩된 프로필별 태그를 만나면 ImplicitProfileId
속성의 값을 태그에 가정된 프로필 ID로 사용합니다.
기본적으로 ImplicitProfileId
속성은 kProfileIdNotSpecified로 설정됩니다. 암시적으로 인코딩된 태그가 포함된 TLV를 디코딩하는 경우 애플리케이션은 이러한 태그가 포함된 TLV 요소를 읽기 전에 ImplicitProfileId
를 설정해야 합니다. 적절한 프로필 ID는 일반적으로 사용되는 애플리케이션 또는 프로토콜의 컨텍스트에 따라 달라집니다.
ImplicitProfileId
이 kProfileIdNotSpecified로 설정된 동안 암시적으로 인코딩된 태그가 있으면 리더는 WEAVE_ERROR_UNKNOWN_IMPLICIT_TLV_TAG 오류를 반환합니다.
보호된 속성
모바일 종료
const uint8_t * mBufEnd
모바일 핸들
uintptr_t mBufHandle
모바일 컨테이너 유형
TLVType mContainerType
mControlByte
uint16_t mControlByte
모바일 라이선스
uint64_t mElemLenOrVal
모바일 태그
uint64_t mElemTag
모바일 읽기
uint32_t mLenRead
mMaxLen
uint32_t mMaxLen
mReadPoint
const uint8_t * mReadPoint
공개 함수
Close컨테이너
WEAVE_ERROR CloseContainer( TLVReader & containerReader )
OpenContainer() 호출 후 TLV 컨테이너 읽기를 완료합니다.
CloseContainer() 메서드는 OpenContainer()를 호출한 후 상위 TLVReader 객체의 상태를 복원합니다. OpenContainer()를 호출할 때마다 해당하는 메서드를 CloseContainer()로 호출하여 동일한 메서드에 대한 참조를 두 메서드에 모두 전달해야 합니다.
CloseContainer()가 반환되면 상위 리더가 컨테이너 다음에 오는 첫 번째 요소 바로 앞에 배치됩니다. 이 시점부터 애플리케이션은 Next() 메서드를 사용하여 남은 요소를 진행할 수 있습니다.
애플리케이션은 기본 컨테이너의 모든 요소를 읽었는지 여부와 관계없이 언제든지 상위 리더에서 닫기 CloseContainer()를 호출할 수 있습니다. CloseContainer()가 호출된 후에는 애플리케이션이 컨테이너 리더를 고려해야 하며 다시 초기화하지 않고는 컨테이너 리더를 더 이상 사용해서는 안 됩니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
매개변수 |
|
||||||||||||
반환 값 |
|
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() 메서드를 호출하여 컨테이너 다음에 있는 요소를 계속 읽을 수 있습니다.
세부정보 | |||||
---|---|---|---|---|---|
매개변수 |
|
||||
반환 값 |
|
이탈 컨테이너
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
현재 TLV 요소와 연결된 제어 바이트를 반환합니다.
아무도 제어 바이트에 대해 알 필요가 없고 이상적으로는 TLV의 내부 구현만 액세스 바이트에 액세스할 수 있어야 합니다. 하지만 그렇더라도 제어 바이트에 대한 액세스 권한은 TLVDebug유틸리티의 디버깅 목적에 유용합니다(TLV 버퍼 콘텐츠를 예쁘게 인쇄할 때 태그 컨트롤 바이트를 디코딩하려고 함).
세부정보 | |
---|---|
반환 |
현재 TLV 요소와 연결된 제어 바이트를 포함하는 부호 없는 정수입니다. kTLVControlByte_NotSpecified는 리더가 요소 위에 배치되지 않은 경우 반환됩니다.
|
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(TLVType predictedType, uint64_t predictedTag) 메서드는 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()와 마찬가지로 호출 시점에 컨테이너 요소에 리더가 배치되면 컨테이너의 멤버를 건너뜁니다. 리더가 아무 위치에도 배치되지 않으면 리더의 위치는 변경되지 않습니다.
세부정보 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
반환 값 |
|
확인 종료 컨테이너
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을 반환하는 비공개 메서드입니다.
데이터 보장
WEAVE_ERROR EnsureData( WEAVE_ERROR noDataErr )
GetElementHeadLength
WEAVE_ERROR GetElementHeadLength( uint8_t & elemHeadBytes ) const
이는 TLV 요소 헤드의 길이를 계산하는 데 사용되는 비공개 메서드입니다.
컨테이너 컨테이너
bool IsContainerOpen( void ) const
데이터 읽기
WEAVE_ERROR ReadData( uint8_t *buf, uint32_t len )
ReadElement
WEAVE_ERROR ReadElement( void )
읽기 태그
uint64_t ReadTag( TLVTagControl tagControl, const uint8_t *& p )
컨테이너 컨테이너 열기
void SetContainerOpen( bool aContainerOpen )
데이터 건너뛰기
WEAVE_ERROR SkipData( void )
대상 버퍼 없이 데이터를 읽으면서 현재 TLV에 포함된 모든 데이터를 건너뜁니다.
세부정보 | |||||
---|---|---|---|---|---|
반환 값 |
|
컨테이너 건너뛰기
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 )