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.

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

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

Cung cấp một giao diện thống nhất Reader / Writer để chỉnh sửa / thêm / xóa các yếu tố trong TLV mã hóa.

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. Các TLVUpdater đối tượng chủ yếu đóng vai trò giống như hai con trỏ, một cho đọc mã hóa hiện có và một cho văn bản (hoặc để sao chép trên các dữ liệu hiện có hoặc ghi dữ liệu mới).

Ngữ nghĩa, các TLVUpdater chức năng đối tượng giống như một đoàn củaTLVReaderTLVWriter . Các TLVUpdater phương pháp có ý nghĩa nhiều hơn hoặc ít tương tự như các đối tác có tên tương tự ở TLVReader / TLVWriter. Trong trường hợp có sự khác biệt trong ngữ nghĩa, sự khác biệt được ghi nhận 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ề TLVUpdater 's PutBytes () và PutString () phương pháp này là nó có thể để lại các mã hóa trong tình trạng tham nhũng với chỉ tiêu đề nguyên tố bằng văn bản khi một tràn xảy ra. Ứng dụng có thể gọi GetRemainingFreeLength () để đảm bảo có khoảng đủ không gian 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 cho các ứng dụng để biết chiều dài của dữ liệu được mã hóa đó được viết ra. 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, lưu ý rằng tiếp theo () phương pháp quá tải cho cả hai bỏ qua các yếu tố hiện tại và cũng thúc đẩy người đọc nội bộ để các phần tử tiếp theo. Bởi vì bỏ qua các yếu tố đã được mã hóa đòi hỏi thay đổi biến trạng thái không gian trống nhà văn nội bộ để chiếm không gian tự do mới (làm sẵn bằng cách bỏ qua), việc áp dụng dự kiến sẽ gọi tiếp theo () trên updater sau khi một phương pháp Get () mà giá trị của nó doesn '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 TLVUpdater đối tượng cho việc đọc các yếu tố của một container.
ExitContainer ( TLVType outerContainerType)
Hoàn thành việc đọc một TLV yếu tố container và mã hóa kết thúc của TLV phần tử trong sản lượng 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 tạo một TLVUpdater đối tượng để chỉnh sửa một bộ đệm đầu vào duy nhất.
Init (TLVReader & aReader, uint32_t freeLen)
Khởi tạo một TLVUpdater đối tượng sử dụng mộtTLVReader .
Move (void)
Bản sao các yếu tố hiện từ đầu vào TLV tới sản lượng TLV .
MoveUntilEnd (void)
void
Di chuyển tất cả mọi thứ từ TLVUpdater điểm đọc hiện nay 's cho đến khi kết thúc đầu vào TLV đệm trên đầu ra.
Next (void)
Bỏ qua các yếu tố hiện tại và thúc đẩy các TLVUpdater đối tượng để các 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 Sơ ID Implicit cho TLVUpdater đối tượng.
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 TLVUpdater đối tượng cho việc đọc các yếu tố của một container.

Nó cũng giải mã một sự khởi đầu của đối tượng chứa trong đầu ra TLV .

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

Khi EnterContainer () được gọi là TLVUpdater 's đọc phải được bố trí trên các yếu tố container. 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 khi nó đang đọc vùng chứa.

Khi EnterContainer () trở về phương pháp, updater được bố trí ngay trước khi thành viên đầu tiên của container. Nhiều lần gọi tiếp theo () sẽ thúc đẩy các cập nhật thông qua các thành viên của bộ sưu tập cho đến khi cuối cùng đã đạt được, lúc này updater sẽ trở lại WEAVE_END_OF_TLV.

Một khi ứng dụng đã đọc xong một container có thể tiếp tục đọc các yếu tố sau container bằng cách gọi ExitContainer () phương pháp.

Chi tiết
Thông số
[out] outerContainerType
Tham chiếu đến giá trị TLVType sẽ nhận được 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 TLVUpdater đọc không được đặt trên một yếu tố container.
other
Bất kỳ mã Weave hay nền tảng lỗi khác được trả về bởi TLVWriter :: StartContainer () hoặc TLVReader :: EnterContainer () .

ExitContainer

WEAVE_ERROR ExitContainer(
  TLVType outerContainerType
)

Hoàn thành việc đọc một TLV yếu tố container và mã hóa kết thúc của TLV phần tử trong sản lượng TLV .

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

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

Khi EnterContainer () đã được gọi là, các ứng dụng có thể gọi ExitContainer () trên updater tại bất kỳ thời điểm nào, bất kể tất cả các yếu tố trong container cơ bản đã được đọc. Ngoài ra, lưu ý rằng gọi ExitContainer () trước khi đọc tất cả các yếu tố trong container, sẽ dẫn đến việc chứa được cập nhật bị cắt ngắn ở đầu ra TLV .

Chi tiết
Thông số
[in] outerContainerType
Các TLVType giá trị đã được trả về bởi các EnterContainer () phương pháp.
Giá trị trả lại
WEAVE_NO_ERROR
Nếu phương pháp thành công.
WEAVE_ERROR_TLV_UNDERRUN
Nếu cơ bản TLV mã hoa kết thúc sớm.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu updater gặp không hợp lệ hoặc không được hỗ trợ TLV loại nguyên tố.
WEAVE_ERROR_INVALID_TLV_TAG
Nếu updater gặp một TLV thẻ trong một bối cảnh không hợp lệ.
other
Bất kỳ mã Weave hay nền tảng lỗi 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 TLVUpdater đối tượng để chỉnh sửa một bộ đệm đầu vào duy nhất.

Trên gọi phương pháp này, TLV dữ liệu trong bộ đệm được chuyển đến cuối của bộ đệm và một tinTLVReader đối tượng được khởi tạo trên đệm di dời này. Một tinTLVWriter đối tượng cũng được khởi tạo trên không gian miễn phí mà bây giờ đã có ngay từ đầu. Ứng dụng có thể sử dụng TLVUpdater đối tượng để phân tích TLV dữ liệu và chỉnh sửa / xóa các yếu tố hiện có hoặc thêm các yếu tố mới để mã hóa.

Chi tiết
Thông số
[in] buf
Một con trỏ đến một bộ đệm chứa TLV dữ liệu để được chỉnh sửa.
[in] dataLen
Chiều dài của TLV dữ liệu 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ỉ bộ đệ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 một TLVUpdater đối tượng sử dụng mộtTLVReader .

Trên gọi phương pháp này, TLV dữ liệu trong bộ đệm được trỏ đến bởiTLVReader được di chuyển từ điểm đọc hiện tại đến cuối của bộ đệm. Một tin mớiTLVReader đối tượng được khởi tạo để đọc từ vị trí mới này, trong khi một tin mớiTLVWriter đối tượng được khởi tạo để ghi vào không gian đệm giải phóng.

Lưu ý rằng nếuTLVReader đã được vị trí "on" một phần tử, nó là lần đầu tiên ủng hộ-off khi bắt đầu phần tử đó. Cũng lưu ý rằng sự ủng hộ này ra khỏi hoạt động tốt với các yếu tố container, ví dụ, nếuTLVReader đã được sử dụng để gọi EnterContainer () , sau đó không có gì để back-off là. Nhưng nếuTLVReader được đặt trên các yếu tố container và EnterContainer () vẫn chưa được gọi, thìTLVReader đối tượng được hỗ trợ-off khi bắt đầu của người đứng đầu container.

Các đầu vàoTLVReader đối tượng sẽ bị phá hủy trước khi trở về và ứng dụng không phải tận dụng giống nhau trên trở lại.

Chi tiết
Thông số
[in,out] aReader
Tham chiếu đến mộtTLVReader đối tượng đó sẽ bị phá hủy trước khi trở về.
[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ỉ bộ đệ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
)

Bản sao các yếu tố hiện từ đầu vào TLV tới sản lượng TLV .

Các Move () phương pháp bản sao các yếu tố hiện tại trên đó TLVUpdater 'đọc s được định vị trên, đến TLVUpdater ' nhà văn s. Ứng dụng này nên gọi tiếp theo () và vị trí TLVUpdater reader 's trên một yếu tố trước khi gọi phương pháp này. Cũng giống như các TLVReader :: Tiếp () phương pháp, nếu người đọc được định vị trên một yếu tố container tại thời điểm cuộc gọi, tất cả các thành viên của container 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 TLVUpdater đọc được thành công vị trí trên một yếu tố mới.
WEAVE_END_OF_TLV
Nếu TLVUpdater đọc s' được trỏ đến kết thúc của container.
WEAVE_ERROR_INVALID_TLV_ELEMENT
Nếu độc giả của TLVIpdater không đặt trên một giá trị TLV phần tử.
other
Trả mã lỗi khác được trả về bởi TLVReader :: Skip () phương pháp.

MoveUntilEnd

void MoveUntilEnd(
  void
)

Di chuyển tất cả mọi thứ từ TLVUpdater điểm đọc hiện nay 's cho đến khi kết thúc đầu vào TLV đệm trên đầu ra.

Phương pháp này hỗ trợ di chuyển tất cả mọi thứ từ TLVUpdater 'điểm đọc hiện tại s đến hết người đọc đệm giao cho TLVUpdater ' nhà văn s.

Kế tiếp

WEAVE_ERROR Next(
  void
)

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

Các Next () phương pháp bỏ qua các yếu tố hiện tại trong đầu vào TLV và tiến bộ TLVUpdater reader 's tới phần tử tiếp theo mà cư trú trong bối cảnh kiềm chế tương tự. Đặc biệt, nếu người đọc là vị trí ở cấp nhất bên ngoài của một TLV mã hóa, kêu gọi tiếp theo () sẽ thúc đẩy nó vào phần tử tiếp theo, đầu nhất. Nếu người đọc được định vị trong một TLV yếu tố container (một cấu trúc, mảng hoặc đường dẫn), kêu gọi tiếp theo () sẽ thúc đẩy nó vào yếu tố thành viên tiếp theo của container.

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

Khi không có các yếu tố hơn nữa trong một bối cảnh ngăn chặn đặc biệt là Tiếp () phương pháp sẽ trả về một WEAVE_END_OF_TLV lỗi và vị trí của người đọc sẽ không thay đổi.

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

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

l10n-placeholder = 56

PutBytes

l10n-placeholder = 57

PutNull

l10n-placeholder = 58

PutString

l10n-placeholder = 59

PutString

l10n-placeholder = 60

SetImplicitProfileId

l10n-placeholder = 61

Đặt Sơ ID Implicit cho đối tượng TLVUpdater.

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

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

l10n-placeholder = 62

VerifyEndOfContainer

l10n-placeholder = 63