Google은 흑인 공동체를 위한 인종적 평등을 추구하기 위해 노력하고 있습니다. 자세히 알아보기

nl::매트::TLV::TLVUpdater

#include <src/lib/core/WeaveTLV.h>

TLV 인코딩의 요소를 수정/추가/삭제하기 위한 통합 리더/작성자 인터페이스를 제공합니다.

요약

TLVUpdaterTLVReaderTLVWriter 객체의 합집합이며, 인코딩에서 데이터를 수정/삭제하고 TLV 인코딩에 새 요소를 추가하는 인터페이스 메서드를 제공합니다. TLVUpdater 객체는 기본적으로 두 개의 커서 역할을 합니다. 하나는 기존 인코딩을 읽고 다른 하나는 쓰기 (기존 데이터를 복사하거나 새 데이터를 쓰기 위한 용도)입니다.

의미상 TLVUpdater 객체는 TLVReaderTLVWriter의 합집합과 같이 작동합니다. TLVUpdater 메서드는 TLVReader/TLVWriter의 비슷한 이름의 메서드와 거의 비슷하거나 같은 의미를 갖습니다. 시맨틱에 차이가 있는 경우 WeaveTLVUpdater.cpp의 함수 주석 섹션에 차이점이 명확하게 설명되어 있습니다.

TLVUpdater&=35; PushBytes() 및 CapString() 메서드와 관련하여 특히 중요한 점은 오버플로가 발생할 때 요소 헤더만 작성된 손상된 상태로 인코딩을 남겨둘 수 있다는 점입니다. 애플리케이션은 GetRemainingFreeLength()를 호출하여 인코딩을 작성하기에 충분한 의 여유 공간이 있는지 확인할 수 있습니다. GetRemainingFreeLength()는 사용 가능한 여유 바이트만 알려주며 애플리케이션이 기록되는 인코딩된 데이터의 길이를 알 수 있는 방법은 없습니다. 오버플로가 발생하면 참여자에게 WEBytes()와 FooString()이 모두 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)
TLV 컨테이너 요소의 읽기를 완료하고 TLV 요소의 끝을 TLV 출력으로 인코딩합니다.
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)
입력 TLV의 현재 요소를 TLV 출력에 복사합니다.
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)

공개 함수

요소 복사

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

요소 복사

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

DupBytes

WEAVE_ERROR DupBytes(
  uint8_t *& buf,
  uint32_t & dataLen
)

DupString

WEAVE_ERROR DupString(
  char *& buf
)

종료 컨테이너

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() 메서드를 호출하여 컨테이너 다음에 있는 요소를 계속 읽을 수 있습니다.

세부정보
매개변수
[out] outerContainerType
업데이터의 컨텍스트를 수신할 TLVType 값에 대한 참조입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
WEAVE_ERROR_INCORRECT_STATE
TLVUpdater 리더가 컨테이너 요소에 배치되지 않은 경우
other
TLVWriter::StartContainer() 또는 TLVReader::EnterContainer()가 반환하는 기타 Weave 또는 플랫폼 오류 코드.

이탈 컨테이너

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

TLV 컨테이너 요소의 읽기를 완료하고 TLV 요소의 끝을 TLV 출력으로 인코딩합니다.

ExitContainer() 메서드는 EnterContainer()를 호출한 후 TLVUpdater 객체의 상태를 복원합니다. EnterContainer()를 호출할 때마다 애플리케이션은 ExitContainer()를 호출하여 EnterContainer() 메서드에서 반환하는 컨텍스트 값을 전달해야 합니다.

ExitContainer()가 반환되면 TLVUpdater 리더는 입력 TLV의 컨테이너 다음에 오는 첫 번째 요소 바로 앞에 배치됩니다. 이 시점부터 애플리케이션은 Next()를 호출하여 나머지 요소를 진행할 수 있습니다.

EnterContainer()가 호출되면 애플리케이션은 기본 컨테이너의 모든 요소를 읽었는지 여부와 관계없이 언제든지 업데이터에서 ExitContainer()를 호출할 수 있습니다. 또한 컨테이너의 모든 요소를 읽기 전에 ExitContainer()를 호출하면 업데이트된 컨테이너가 잘리며 출력 TLV가 발생합니다.

세부정보
매개변수
[in] outerContainerType
EnterContainer() 메서드에서 반환된 TLVType 값입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
WEAVE_ERROR_TLV_UNDERRUN
기본 TLV 인코딩이 조기에 종료된 경우
WEAVE_ERROR_INVALID_TLV_ELEMENT
업데이터에 잘못되었거나 지원되지 않는 TLV 요소 유형이 발생한 경우
WEAVE_ERROR_INVALID_TLV_TAG
업데이터에 잘못된 컨텍스트에서 TLV 태그가 있는 경우
other
TLVWriter::EndContainer() 또는 TLVReader::ExitContainer()에서 반환하는 다른 Weave 또는 플랫폼 오류 코드.

완료

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 

GetLengthWrite

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 데이터를 파싱하고 기존 요소를 수정/삭제하거나 인코딩에 새 요소를 추가할 수 있습니다.

세부정보
매개변수
[in] buf
수정할 TLV 데이터가 포함된 버퍼에 대한 포인터입니다.
[in] dataLen
버퍼에 있는 TLV 데이터의 길이입니다.
[in] maxLen
버퍼의 총 길이입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
WEAVE_ERROR_INVALID_ARGUMENT
버퍼 주소가 잘못된 경우.
WEAVE_ERROR_BUFFER_TOO_SMALL
버퍼가 너무 작은 경우.

Init

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

TLVReader를 사용하여 TLVUpdater 객체를 초기화합니다.

이 메서드를 호출하면 TLVReader가 가리키는 버퍼의 TLV 데이터가 현재 읽기 포인트에서 버퍼의 끝으로 이동합니다. 새로운 비공개 TLVReader 객체는 이 새 위치에서 읽도록 초기화되는 반면 새로운 비공개 TLVWriter 객체는 해제된 여유 버퍼 공간에 쓰도록 초기화됩니다.

TLVReader가 이미 요소를 배치한 경우 이 요소의 시작 부분에서 먼저 백오프됩니다. 또한 이 백오프는 컨테이너 요소에서 잘 작동합니다. 예를 들어 TLVReader가 이미 EnterContainer()를 호출하는 데 사용된 경우, 백오프할 항목이 없습니다. 그러나 TLVReader가 컨테이너 요소에 배치되었고 EnterContainer()가 아직 호출되지 않은 경우에는 TLVReader 객체가 컨테이너 헤드 시작 지점으로 백오프됩니다.

입력 전에 TLVReader 객체가 제거되며 반환 시 애플리케이션은 이를 동일하게 사용해서는 안 됩니다.

세부정보
매개변수
[in,out] aReader
반환하기 전에 제거되는 TLVReader 객체에 대한 참조입니다.
[in] freeLen
사전 인코딩된 데이터 버퍼에 사용 가능한 여유 공간의 길이 (바이트)입니다.
반환 값
WEAVE_NO_ERROR
메서드가 성공한 경우
WEAVE_ERROR_INVALID_ARGUMENT
버퍼 주소가 잘못된 경우.
WEAVE_ERROR_NOT_IMPLEMENTED
버퍼 체인에서 리더가 초기화된 경우

이동

WEAVE_ERROR Move(
  void
)

입력 TLV의 현재 요소를 TLV 출력에 복사합니다.

Move() 메서드는 TLVUpdater 리더가 위치한 현재 요소를 TLVUpdater 작성자에 복사합니다. 애플리케이션은 이 메서드를 호출하기 전에 Next()를 호출하고 요소에 TLVUpdater의 리더를 배치해야 합니다. TLVReader::Next() 메서드와 마찬가지로 호출 시 리더 요소에 위치하면 컨테이너의 모든 구성원이 복사됩니다. 리더가 위치에 배치되지 않으면 이 메서드를 호출할 때 변경되는 사항은 없습니다.

세부정보
반환 값
WEAVE_NO_ERROR
TLVUpdater 리더가 새 요소에 성공적으로 배치된 경우.
WEAVE_END_OF_TLV
TLVUpdater 리더가 컨테이너의 끝을 가리키고 있는지 확인합니다.
WEAVE_ERROR_INVALID_TLV_ELEMENT
TLVIpdater 리더가 유효한 TLV 요소에 배치되지 않은 경우
other
TLVReader::Skip() 메서드에서 반환한 다른 오류 코드를 반환합니다.

이동 종료 시점

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 오류를 반환하고 리더의 위치는 변경되지 않습니다.

세부정보
반환 값
WEAVE_NO_ERROR
TLVUpdater 리더가 새 요소에 성공적으로 배치된 경우.
other
TLVReader::Skip()TLVReader::Next() 메서드에서 반환한 Weave 또는 플랫폼 오류 코드를 반환합니다.

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
)

Null

WEAVE_ERROR PutNull(
  uint64_t tag
)

퍼스트링

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

퍼스트링

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가 생략됩니다.

세부정보
매개변수
[in] profileId
암시적 형식으로 인코딩되어야 하는 태그의 프로필 ID입니다.

시작 컨테이너

WEAVE_ERROR StartContainer(
  uint64_t tag,
  TLVType containerType,
  TLVType & outerContainerType
)

확인 종료 컨테이너

WEAVE_ERROR VerifyEndOfContainer(
  void
)