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.
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.

nl::Tạo văn bản::TLV::TLVUpdater

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

Cung cấp giao diện Trình đọc/Viết hợp nhất để chỉnh sửa/thêm/xóa các phần tử trong phương thức mã hóa TLV.

Tóm tắt

TLVUpdater là sự hợp nhất của các đối tượng TLVReaderTLVWriter và cung cấp các phương thức giao diện để chỉnh sửa/xóa dữ liệu trong quá trình mã hóa cũng như thêm các phần tử mới vào phương thức mã hóa TLV. Về cơ bản, đối tượng TLVUpdater hoạt động như hai con trỏ, một con trỏ dùng để đọc chế độ mã hóa hiện có và một con khác dùng để ghi (để 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 như một sự hợp nhất của TLVReaderTLVWriter. Các phương thức TLVUpdater có nhiều hoặc ít ý nghĩa tương tự như các phương thức có 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 chỉ có tiêu đề phần tử được ghi khi 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ã. 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 để ứng dụng biết độ dài của dữ liệu đã mã hoá được ghi. Trong trường hợp bị tràn, cả PutBytes() và PutString() sẽ trả về WEAVE_ERROR_BUFFER_TOO_SMALL cho người gọi.

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

Không hỗ trợ chuỗi vùng đệm (PacketBuffer).

Hàm công khai

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

Hàm công khai

Sao chép phần tử

WEAVE_ERROR CopyElement(
  TLVReader & reader
)

Sao chép phần tử

WEAVE_ERROR CopyElement(
  uint64_t tag,
  TLVReader & reader
)

DupBytes

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

Chuỗi Dup

WEAVE_ERROR DupString(
  char *& buf
)

Vùng chứa kết thúc

WEAVE_ERROR EndContainer(
  TLVType outerContainerType
)

EnterContainer

WEAVE_ERROR EnterContainer(
  TLVType & outerContainerType
)

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

Mã này cũng mã hoá phần đầu đố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 thành phần thành phần của một vùng chứa TLV (cấu trúc, mảng hoặc đường dẫn). Đối với mỗi lệnh gọi đến ứng dụng EnterContainer(), bạn phải thực hiện lệnh gọi tương ứng với ExitContainer().

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

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

Sau khi đọc xong một vùng chứa, ứng dụng 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().

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

Thoát vùng chứa

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Hoàn thành 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 đầu ra TLV.

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

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, ứng dụng có thể gọi Next() để chuyển qua bất kỳ phần tử còn lại nào.

Sau khi EnterContainer() được gọi, các ứng dụng có thể gọi ExitContainer() trên trình cập nhật vào bất kỳ thời điểm nào, bất kể tất cả các phần tử trong vùng chứa cơ bản đã được đọc hay chưa. Ngoài ra, xin 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 cập nhật bị cắt bớt trong TLV đầu ra.

Do đó, ứng dụng có trách nhiệm điều chỉnh cấu hình cho phù hợp vào những thời điểm thích hợp.

Thông tin chi tiết
Các tham số
[in] outerContainerType
Giá trị TLVType được phương thức EnterContainer() trả về.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_TLV_UNDERRUN
Nếu quá trình mã hoá TLV cơ bản 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 bối cảnh không hợp lệ.
other
Mọi mã lỗi Weave hoặc nền tảng khác mà TLVWriter::EndContainer() hoặc TLVReader::ExitContainer() trả về.

Hoàn tất

WEAVE_ERROR Finalize(
  void
)

Get

WEAVE_ERROR Get(
  bool & v
)

Get

WEAVE_ERROR Get(
  int8_t & v
)

Get

WEAVE_ERROR Get(
  int16_t & v
)

Get

WEAVE_ERROR Get(
  int32_t & v
)

Get

WEAVE_ERROR Get(
  int64_t & v
)

Get

WEAVE_ERROR Get(
  uint8_t & v
)

Get

WEAVE_ERROR Get(
  uint16_t & v
)

Get

WEAVE_ERROR Get(
  uint32_t & v
)

Get

WEAVE_ERROR Get(
  uint64_t & v
)

Get

WEAVE_ERROR Get(
  float & v
)

Get

WEAVE_ERROR Get(
  double & v
)

Nhận byte

WEAVE_ERROR GetBytes(
  uint8_t *buf,
  uint32_t bufSize
)

Nhận loại vùng chứa

TLVType GetContainerType(
  void
) const 

Nhận dữ liệu

WEAVE_ERROR GetDataPtr(
  const uint8_t *& data
)

Nhận IdProfileId

uint32_t GetImplicitProfileId(
  void
)

Tải độ dài

uint32_t GetLength(
  void
) const 

Nhận độ dài đọc

uint32_t GetLengthRead(
  void
) const 

Viết có độ dài

uint32_t GetLengthWritten(
  void
)

Tải xuống Reader

void GetReader(
  TLVReader & containerReader
)

Nhận độ dài miễn phí

uint32_t GetRemainingFreeLength(
  void
)

Lấy chiều dài còn lại

uint32_t GetRemainingLength(
  void
) const 

Nhận chuỗi

WEAVE_ERROR GetString(
  char *buf,
  uint32_t bufSize
)

Nhận thẻ

uint64_t GetTag(
  void
) const 

Loại Get

TLVType GetType(
  void
) const 

Init

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

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

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

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

Init

WEAVE_ERROR Init(
  TLVReader & aReader,
  uint32_t freeLen
)

Khởi động đối tượng TLVUpdater bằng TLVReader.

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

Lưu ý rằng nếu TLVReader đã được định vị "on" một phần tử thì trước tiên sẽ được sao lưu vào đầu phần tử đó. Ngoài ra, xin lưu ý rằng tính năng sao lưu này hoạt động tốt với các phần tử của vùng chứa, tức là nếu TLVReader đã được dùng để gọi EnterContainer(), thì không có gì để đợi. Nhưng nếu TLVReader được đặt trên phần tử vùng chứa và EnterContainer() chưa được gọi, thì đối tượng TLVReader đã bị sao lưu vào đầu phần chứa.

Đối tượng TLVReader đầu vào sẽ bị huỷ trước khi quay lại và ứng dụng không được sử dụng cùng một đối tượng khi trả lại.

Thông tin chi tiết
Các tham số
[in,out] aReader
Tham chiếu đến một đối tượng TLVReader sẽ bị huỷ bỏ trước khi trả về.
[in] freeLen
Độ dài của dung lượng trống (tính bằng byte) có sẵn trong vùng đệm dữ liệu được mã hoá trước.
Giá trị trả về
WEAVE_NO_ERROR
Nếu phương thức này thành công.
WEAVE_ERROR_INVALID_ARGUMENT
Nếu địa chỉ vùng đệm không hợp lệ.
WEAVE_ERROR_NOT_IMPLEMENTED
Nếu trình đọc được khởi chạy 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ừ đầu vào TLV sang đầu ra TLV.

Phương thức Move() sao chép phần tử hiện tại mà trình đọc TLVUpdater\39 được định vị, sang tác giả TLVUpdater&39;. Ứng dụng sẽ gọi Next() và định vị trình đọc TLVUpdater&39 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 thực hiện lệnh gọi, thì tất cả thành viên của vùng chứa đó sẽ được sao chép. Nếu trình đọc không nằm trên bất kỳ phần tử nào thì sẽ không có gì thay đổi khi gọi phương thức này.

Thông tin chi tiết
Giá trị trả về
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 TLVUpdater\39; đang trỏ đến cuối vùng chứa.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu trình đọc của TLVIpdater\39 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ề.

Di chuyển cho đến cuối

void MoveUntilEnd(
  void
)

Di chuyển mọi thứ từ điểm đọc hiện tại TLVUpdater\39; cho đến khi kết thúc bộ đệm TLV đầu vào.

Phương thức này hỗ trợ di chuyển mọi thứ từ điểm đọc hiện tại TLVUpdater\39 cho đến khi vùng đệm trình đọc kết thúc sang trình ghi của TLVUpdater&39;

Tiếp theo

WEAVE_ERROR Next(
  void
)

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

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

Next() ràng buộc chuyển động của trình đọc đối với ngữ cảnh vùng chứa hiện tại, nên 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 lên vùng chứa đó, bỏ qua các phần tử thành phần (và các thành phần của bất kỳ vùng chứa lồng nhau nào) cho đến khi đến phần tử đầu tiên 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.

Thông tin chi tiết
Giá trị trả về
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 mà phương thức TLVReader::Skip()TLVReader::Next() trả về.

Đặ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
)

Boolean

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
)

Chuỗi dây

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf
)

Chuỗi dây

WEAVE_ERROR PutString(
  uint64_t tag,
  const char *buf,
  uint32_t len
)

Đặt Hàm ProfileProfile

void SetImplicitProfileId(
  uint32_t profileId
)

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

Phương thức này sẽ đặt mã hồ sơ ngầm cho đối tượng TLVUpdater. Khi trình cập nhật được yêu cầu mã hoá một phần tử mới, nếu mã hồ sơ của thẻ 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ã hoá thẻ ở dạng ngầm ẩn, do đó bỏ qua mã hồ sơ trong quá trình này.

Thông tin chi tiết
Các tham số
[in] profileId
Mã hồ sơ của những thẻ phải được mã hóa ở dạng ẩn.

StartContainer

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

Xác minh EndEndOfContainer

WEAVE_ERROR VerifyEndOfContainer(
  void
)