nl:: Weave:: TLV:: TLVUpdater
#include <src/lib/core/WeaveTLV.h>
TLV 인코딩에서 요소를 수정/추가/삭제하기 위한 통합된 리더/작성기 인터페이스를 제공합니다.
요약
TLVUpdater는 TLVReader 및 TLVWriter 객체의 통합으로, 인코딩에서 데이터를 수정/삭제하고 새 요소를 TLV 인코딩에 추가하기 위한 인터페이스 메서드를 제공합니다. TLVUpdater 객체는 기본적으로 두 개의 커서처럼 작동합니다. 하나는 기존 인코딩을 읽는 데 사용되고, 다른 하나는 쓰기 (기존 데이터 복사 또는 새 데이터 쓰기)를 위한 커서입니다.
의미상 TLVUpdater 객체는 TLVReader 및 TLVWriter의 합집합과 같이 작동합니다. TLVUpdater 메서드는 TLVReader/TLVWriter의 유사한 이름이 지정된 대응 항목과 거의 비슷한 의미를 갖습니다. 시맨틱스에 차이가 있는 경우 차이점은 WeaveTLVUpdater.cpp의 함수의 주석 섹션에 명확하게 문서화됩니다.
TLVUpdater의 PutBytes() 및 PutString() 메서드에 대한 특히 중요한 점은 오버플로가 발생할 때 요소 헤더만 기록하여 인코딩을 손상된 상태로 둘 수 있다는 것입니다. 애플리케이션은 GetRemainingFreeLength()를 호출하여 인코딩을 작성하기에 대략의 여유 공간이 있는지 확인할 수 있습니다. GetRemainingFreeLength()는 사용 가능한 여유 바이트만 알려주며 애플리케이션이 작성되는 인코딩된 데이터의 길이를 알 수 있는 방법은 없습니다. 오버플로가 발생하면 PutBytes()와 PutString() 모두 호출자에게 WEAVE_ERROR_BUFFER_TOO_SMALL을 반환합니다.
또한 Next() 메서드는 현재 요소를 건너뛰고 내부 리더를 다음 요소로 진행하도록 오버로드됩니다. 이미 인코딩된 요소를 건너뛰려면 (건너뛰기를 통해 사용 가능한) 새로운 여유 공간을 고려하여 내부 작성자의 여유 공간 상태 변수를 변경해야 하므로 애플리케이션은 다시 쓰지 않으려는 Get() 메서드(현재 요소를 건너뛰는 것과 동일함) 후에 업데이터에서 Next()를 호출해야 합니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.
공개 함수 |
|
---|---|
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)
|
TLVReader를 사용하여 TLVUpdater 객체를 초기화합니다.
|
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 객체의 암시적 프로필 ID를 설정합니다.
|
StartContainer(uint64_t tag, TLVType containerType, TLVType & outerContainerType)
|
|
VerifyEndOfContainer(void)
|
공개 함수
CopyElement
WEAVE_ERROR CopyElement( TLVReader & reader )
CopyElement
WEAVE_ERROR CopyElement( uint64_t tag, TLVReader & reader )
DupBytes
WEAVE_ERROR DupBytes( uint8_t *& buf, uint32_t & dataLen )
DupString
WEAVE_ERROR DupString( char *& buf )
EndContainer
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() 메서드를 호출하여 컨테이너 이후에 요소 읽기를 계속할 수 있습니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
ExitContainer
WEAVE_ERROR ExitContainer( TLVType outerContainerType )
TLV 컨테이너 요소의 읽기를 완료하고 출력 TLV에서 TLV 요소의 끝을 인코딩합니다.
ExitContainer() 메서드는 EnterContainer()를 호출한 후 TLVUpdater 객체의 상태를 복원합니다. 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 )
GetLength
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
Init
WEAVE_ERROR Init( uint8_t *buf, uint32_t dataLen, uint32_t maxLen )
TLVUpdater 객체를 초기화하여 단일 입력 버퍼를 수정합니다.
이 메서드를 호출하면 버퍼의 TLV 데이터가 버퍼의 끝으로 이동하고 비공개 TLVReader 객체가 이 재배치된 버퍼에서 초기화됩니다. 비공개 TLVWriter 객체도 이제 시작 부분에서 사용할 수 있는 여유 공간에서 초기화됩니다. 애플리케이션은 TLVUpdater 객체를 사용하여 TLV 데이터를 파싱하고, 기존 요소를 수정/삭제하거나, 새 요소를 인코딩에 추가할 수 있습니다.
세부정보 | |||||||
---|---|---|---|---|---|---|---|
매개변수 |
|
||||||
반환 값 |
|
Init
WEAVE_ERROR Init( TLVReader & aReader, uint32_t freeLen )
TLVReader를 사용하여 TLVUpdater 객체를 초기화합니다.
이 메서드를 호출하면 TLVReader가 가리키는 버퍼의 TLV 데이터가 현재 읽기 포인트에서 버퍼의 끝으로 이동합니다. 새로운 비공개 TLVReader 객체는 이 새로운 위치에서 읽도록 초기화되고, 새로운 비공개 TLVWriter 객체는 확보된 버퍼 공간에 작성하도록 초기화됩니다.
TLVReader가 이미 'on'으로 배치된 경우 해당 요소의 시작 부분으로 백오프됩니다. 또한 이러한 백오프는 컨테이너 요소에서 원활하게 작동합니다. 즉, 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 오류를 반환하고 판독기의 위치가 변경되지 않은 상태로 유지됩니다.
세부정보 | |||||
---|---|---|---|---|---|
반환 값 |
|
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int16_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int32_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int64_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint16_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint32_t v )
Put
WEAVE_ERROR Put( uint64_t tag, uint64_t v )
Put
WEAVE_ERROR Put( uint64_t tag, int8_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int16_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int32_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, int64_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint8_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint16_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint32_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, uint64_t v, bool preserveSize )
Put
WEAVE_ERROR Put( uint64_t tag, float v )
Put
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 객체의 암시적 프로필 ID를 설정합니다.
이 메서드는 TLVUpdater 객체의 암시적 프로필 ID를 설정합니다. 업데이터에 새 요소를 인코딩하라는 메시지가 표시될 때 새 요소와 연결된 태그의 프로필 ID가 profileId
값과 일치하면 업데이터가 태그를 암시적 형식으로 인코딩하므로 프로세스에서 프로필 ID가 생략됩니다.
세부정보 | |||
---|---|---|---|
매개변수 |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )