Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.
Trang này được dịch bởi Cloud Translation API.
Switch to English

nl :: Dệt :: TLV :: TLVUpdater

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

Cung cấp giao diện Reader / Writer thống nhất để chỉnh sửa / thêm / xóa các phần tử trong bảng mã TLV .

Tóm lược

Các TLVUpdater là một liên minh củaTLVReaderTLVWriter đối tượng và cung cấp phương pháp giao diện để chỉnh sửa / xóa dữ liệu trong một mã hóa cũng như thêm các yếu tố mới cho TLV mã hóa. Đối tượng TLVUpdater về cơ bản hoạt động giống như hai con trỏ, một để đọc mã hóa hiện có và một để ghi (hoặc để sao chép dữ liệu hiện có hoặc ghi dữ liệu mới).

Về mặt ngữ nghĩa, đối tượng TLVUpdater hoạt động giống như một sự kết hợp củaTLVReaderTLVWriter . Các phương thức TLVUpdater ít nhiều có ý nghĩa tương tự như các đối tác được đặt tên tương tự trong TLVReader / TLVWriter. Khi có sự khác biệt về ngữ nghĩa, sự khác biệt được ghi lại rõ ràng trong phần nhận xét của hàm trong WeaveTLVUpdater.cpp .

Một lưu ý đặc biệt quan trọng về các phương thức PutBytes () và PutString () của TLVUpdater là nó có thể để mã hóa ở trạng thái bị hỏng với chỉ tiêu đề phần tử được ghi khi xảy ra tràn. Các ứng dụng có thể gọi GetRemainingFreeLength () để đảm bảo có khoảng đủ dung lượng trống để viết mã hóa. Lưu ý rằng GetRemainingFreeLength () chỉ cho bạn biết các byte miễn phí có sẵn và không có cách nào để ứng dụng biết độ dài của dữ liệu được mã hóa được ghi. Trong trường hợp tràn, cả PutBytes () và PutString () sẽ trả về WEAVE_ERROR_BUFFER_TOO_SMALL cho người gọi.

Ngoài ra, hãy lưu ý rằng phương thức Next () được nạp chồng để bỏ qua phần tử hiện tại và cũng đưa bộ đọc nội bộ đến phần tử tiếp theo. Bởi vì việc bỏ qua các phần tử đã được mã hóa yêu cầu thay đổi các biến trạng thái không gian trống của trình ghi bên trong để tính đến không gian giải phóng mới (có sẵn bằng cách bỏ qua), ứng dụng sẽ gọi Next () trên trình cập nhật sau một phương thức Get () có giá trị mà nó không 't muốn viết lại (tương đương với việc bỏ qua phần tử hiện tại).

Chức năng công cộng

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)
Chuẩn bị một đối tượng TLVUpdater để đọc các phần tử của vùng chứa.
ExitContainer ( TLVType outerContainerType)
Hoàn tất việc đọc phần tử vùng chứa TLV và mã hóa phần cuối của phần tử TLV trong TLV đầu ra.
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)
Khởi tạo một đối tượng TLVUpdater để chỉnh sửa một bộ đệm đầu vào duy nhất.
Init (TLVReader & aReader, uint32_t freeLen)
Khởi tạo đối tượng TLVUpdater bằngTLVReader .
Move (void)
Sao chép phần tử hiện tại từ TLV đầu vào sang TLV đầu ra.
MoveUntilEnd (void)
void
Di chuyển mọi thứ từ điểm đọc hiện tại của TLVUpdater cho đến cuối bộ đệm TLV đầu vào sang đầu ra.
Next (void)
Bỏ qua phần tử hiện tại và chuyển đối tượng TLVUpdater đến phần tử tiếp theo trong TLV đầu vào.
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
Đặt ID hồ sơ ngầm định cho đối tượng TLVUpdater .
StartContainer (uint64_t tag, TLVType containerType, TLVType & outerContainerType)
VerifyEndOfContainer (void)

Chức năng công cộng

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
)

Chuẩn bị một đối tượng TLVUpdater để đọc các phần tử của vùng chứa.

Nó cũng mã hóa phần bắt đầu của đối tượng vùng chứa trong TLV đầu ra.

Phương thức EnterContainer () chuẩn bị đối tượng TLVUpdater hiện tại để bắt đầu đọc các phần tử thành viên của vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn). Đối với mỗi cuộc gọi đến các ứng dụng EnterContainer () phải thực hiện một cuộc gọi tương ứng đến ExitContainer () .

Khi EnterContainer () được gọi, trình đọc của TLVUpdater phải được định vị trên phần tử vùng chứa. Phương thức này coi như một đối số là một tham chiếu đến giá trị TLVType sẽ được sử dụng để lưu ngữ cảnh của trình cập nhật trong khi nó đang đọc vùng chứa.

Khi phương thức EnterContainer () trả về, trình cập nhật được đặt ngay trước thành viên đầu tiên của vùng chứa. Việc gọi nhiều lần Next () sẽ tiến trình cập nhật thông qua các thành viên của bộ sưu tập cho đến khi đạt đến phần cuối, lúc này trình cập nhật sẽ trả về WEAVE_END_OF_TLV.

Khi ứng dụng đã đọc xong một vùng chứa, nó có thể tiếp tục đọc các phần tử sau vùng chứa bằng cách gọi phương thức ExitContainer () .

Chi tiết
Thông số
[out] outerContainerType
Tham chiếu đến giá trị TLVType sẽ nhận ngữ cảnh của trình cập nhật.
Giá trị trả lại
WEAVE_NO_ERROR
Nếu phương pháp thành công.
WEAVE_ERROR_INCORRECT_STATE
Nếu trình đọc TLVUpdater không được định vị trên phần tử vùng chứa.
other
Bất kỳ mã lỗi nền tảng hoặc dệt nào khác được trả về bởi TLVWriter :: StartContainer () hoặc TLVReader :: EnterContainer () .

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Hoàn tất việc đọc phần tử vùng chứa TLV và mã hóa phần cuối của phần tử TLV trong TLV đầu ra.

Phương thức ExitContainer () khôi phục trạng thái của một đối tượng TLVUpdater sau khi gọi đến EnterContainer () . Đối với mọi lệnh gọi đến các ứng dụng EnterContainer () phải thực hiện một lệnh gọi tương ứng đến ExitContainer () , truyền giá trị ngữ cảnh được trả về bởi phương thức EnterContainer () .

Khi ExitContainer () trả về, trình đọc TLVUpdater được đặt ngay trước phần tử đầu tiên theo sau vùng chứa trong TLV đầu vào. Từ thời điểm này, các ứng dụng có thể gọi Next () để tiến qua bất kỳ phần tử nào còn lại.

Khi EnterContainer () đã được gọi, các ứng dụng có thể gọi ExitContainer () trên trình cập nhật bất kỳ lúc nào, bất kể tất cả các phần tử trong vùng chứa bên dưới đã được đọc hay chưa. Ngoài ra, lưu ý rằng việc gọi ExitContainer () trước khi đọc tất cả các phần tử trong vùng chứa, sẽ dẫn đến việc vùng chứa đã cập nhật bị cắt ngắn trong TLV đầu ra.

Chi tiết
Thông số
[in] outerContainerType
Giá trị TLVType được trả về bởi phương thức EnterContainer () .
Giá trị trả lại
WEAVE_NO_ERROR
Nếu phương pháp thành công.
WEAVE_ERROR_TLV_UNDERRUN
Nếu mã hóa TLV bên dưới kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu trình cập nhật gặp phải loại phần tử TLV không hợp lệ hoặc không được hỗ trợ.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu trình cập nhật gặp thẻ TLV trong ngữ cảnh không hợp lệ.
other
Bất kỳ mã lỗi nền tảng hoặc dệt nào khác được trả về bởi TLVWriter :: EndContainer () hoặc TLVReader :: ExitContainer () .

Hoàn thiện

WEAVE_ERROR Finalize(
  void
)

Được

WEAVE_ERROR Get(
  bool & v
)

Được

WEAVE_ERROR Get(
  int8_t & v
)

Được

WEAVE_ERROR Get(
  int16_t & v
)

Được

WEAVE_ERROR Get(
  int32_t & v
)

Được

WEAVE_ERROR Get(
  int64_t & v
)

Được

WEAVE_ERROR Get(
  uint8_t & v
)

Được

WEAVE_ERROR Get(
  uint16_t & v
)

Được

WEAVE_ERROR Get(
  uint32_t & v
)

Được

WEAVE_ERROR Get(
  uint64_t & v
)

Được

WEAVE_ERROR Get(
  float & v
)

Được

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 

Trong đó

WEAVE_ERROR Init(
  uint8_t *buf,
  uint32_t dataLen,
  uint32_t maxLen
)

Khởi tạo một đối tượng TLVUpdater để chỉnh sửa một bộ đệm đầu vào duy nhất.

Khi gọi phương thức này, dữ liệu TLV trong bộ đệm được chuyển đến cuối bộ đệm và một đối tượngTLVReader riêng tư được khởi tạo trên bộ đệm được di dời này. Một đối tượngTLVWriter riêng tư cũng được khởi tạo trên không gian trống hiện đã có ở đầu. Các ứng dụng có thể sử dụng đối tượng TLVUpdater để phân tích cú pháp dữ liệu TLV và sửa đổi / xóa các phần tử hiện có hoặc thêm các phần tử mới vào bảng mã.

Chi tiết
Thông số
[in] buf
Một con trỏ tới bộ đệm chứa dữ liệu TLV cần chỉnh sửa.
[in] dataLen
Độ dài của dữ liệu TLV trong bộ đệm.
[in] maxLen
Tổng chiều dài của bộ đệm.
Giá trị trả lại
WEAVE_NO_ERROR
Nếu phương pháp thành công.
WEAVE_ERROR_INVALID_ARGUMENT
Nếu địa chỉ đệm không hợp lệ.
WEAVE_ERROR_BUFFER_TOO_SMALL
Nếu bộ đệm quá nhỏ.

Trong đó

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Khởi tạo đối tượng TLVUpdater bằngTLVReader .

Khi gọi phương thức này, dữ liệu TLV trong bộ đệm đượcTLVReader trỏ tới sẽ được di chuyển từ điểm đọc hiện tại đến điểm cuối của bộ đệm. Một đối tượngTLVReader riêng tư mới được khởi tạo để đọc từ vị trí mới này, trong khi một đối tượngTLVWriter riêng tư mới được khởi tạo để ghi vào vùng đệm đã giải phóng.

Lưu ý rằng nếuTLVReader đã được định vị "trên" một phần tử, thì trước tiên nó sẽ được sao lưu vào đầu phần tử đó. Cũng lưu ý rằng việc sao lưu này hoạt động tốt với các phần tử vùng chứa, tức là nếuTLVReader đã được sử dụng để gọi EnterContainer () , thì không có gì phải lùi lại. Nhưng nếuTLVReader được định vị trên phần tử vùng chứa và EnterContainer () chưa được gọi, thì đối tượngTLVReader sẽ được lùi vào đầu phần tử vùng chứa.

Đối tượngTLVReader đầu vào sẽ bị hủy trước khi trả về và ứng dụng không được sử dụng đối tượng tương tự khi trả lại.

Chi tiết
Thông số
[in,out] aReader
Tham chiếu đến một đối tượngTLVReader sẽ bị hủy trước khi quay trở lại.
[in] freeLen
Độ dài của không gian trống (tính bằng byte) có sẵn trong bộ đệm dữ liệu được mã hóa trước.
Giá trị trả lại
WEAVE_NO_ERROR
Nếu phương pháp thành công.
WEAVE_ERROR_INVALID_ARGUMENT
Nếu địa chỉ đệm không hợp lệ.
WEAVE_ERROR_NOT_IMPLEMENTED
Nếu trình đọc được khởi tạo trên một chuỗi bộ đệm.

Di chuyển

WEAVE_ERROR Move(
  void
)

Sao chép phần tử hiện tại từ TLV đầu vào sang TLV đầu ra.

Phương thức Move () sao chép phần tử hiện tại mà trình đọc của TLVUpdater được đặt trên đó, tới trình ghi của TLVUpdater . Ứng dụng sẽ gọi Next () và định vị trình đọc của TLVUpdater trên một phần tử trước khi gọi phương thức này. Cũng giống như phương thức TLVReader :: Next () , nếu trình đọc được định vị trên một phần tử vùng chứa tại thời điểm gọi, tất cả các thành viên của vùng chứa sẽ được sao chép. Nếu trình đọc không được định vị trên bất kỳ phần tử nào, không có gì thay đổi khi gọi phương thức này.

Chi tiết
Giá trị trả lại
WEAVE_NO_ERROR
Nếu trình đọc TLVUpdater đã được định vị thành công trên một phần tử mới.
WEAVE_END_OF_TLV
Nếu trình đọc của TLVUpdater đang trỏ đến cuối vùng chứa.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu đầu đọc của TLVIpdater không được định vị trên phần tử TLV hợp lệ.
other
Trả về các mã lỗi khác do phương thức TLVReader :: Skip () trả về .

MoveUntilEnd

void MoveUntilEnd(
  void
)

Di chuyển mọi thứ từ điểm đọc hiện tại của TLVUpdater cho đến cuối bộ đệm TLV đầu vào sang đầu ra.

Phương pháp này hỗ trợ di chuyển mọi thứ từ điểm đọc hiện tại của TLVUpdater cho đến cuối bộ đệm của trình đọc qua trình ghi của TLVUpdater .

Kế tiếp

WEAVE_ERROR Next(
  void
)

Bỏ qua phần tử hiện tại và chuyển đối tượng TLVUpdater đến phần tử tiếp theo trong TLV đầu vào.

Phương thức Next () bỏ qua phần tử hiện tại trong TLV đầu vào và chuyển trình đọc của TLVUpdater đến phần tử tiếp theo nằm trong cùng ngữ cảnh chứa. Đặc biệt, nếu trình đọc được đặt ở cấp ngoài cùng của mã hóa TLV , việc gọi Next () sẽ chuyển nó đến phần tử tiếp theo, ở trên cùng. Nếu trình đọc được định vị trong phần tử vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn), việc gọi Next () sẽ chuyển nó đến phần tử thành viên tiếp theo của vùng chứa.

Next () hạn chế chuyển động của trình đọc với ngữ cảnh chứa hiện tại, việc gọi Next () khi trình đọc được định vị trên một phần tử vùng chứa sẽ tiến qua vùng chứa, bỏ qua các phần tử thành viên của nó (và các thành viên của bất kỳ vùng chứa lồng nhau nào) cho đến khi nó đến phần tử đầu tiên phần tử sau vùng chứa.

Khi không có thêm phần tử nào trong ngữ cảnh chứa cụ thể, phương thức Next () sẽ trả về lỗi WEAVE_END_OF_TLV và vị trí của trình đọc sẽ không thay đổi.

Chi tiết
Giá trị trả lại
WEAVE_NO_ERROR
Nếu trình đọc TLVUpdater đã được định vị thành công trên một phần tử mới.
other
Trả về mã lỗi Weave hoặc nền tảng được trả về bởi phương thức TLVReader :: Skip ()TLVReader :: Next () .

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int8_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int16_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int32_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  int64_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint8_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint16_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint32_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  uint64_t v,
  bool preserveSize
)

Đặt

WEAVE_ERROR Put(
  uint64_t tag,
  float v
)

Đặt

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
)

Đặt ID hồ sơ ngầm định cho đối tượng TLVUpdater.

Phương thức này đặt ID hồ sơ ngầm định cho đối tượng TLVUpdater. Khi trình cập nhật được yêu cầu mã hóa một phần tử mới, nếu ID cấu hình của thẻ được liên kết với phần tử mới khớp với giá trị của profileId, trình cập nhật sẽ mã hóa thẻ ở dạng ẩn, do đó bỏ qua ID cấu hình trong quy trình.

Chi tiết
Thông số
[trong] profileId
Id hồ sơ của các thẻ phải được mã hóa ở dạng ẩn.

StartContainer

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

VerifyEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)