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ủaTLVReader vàTLVWriter đố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ủaTLVReader vàTLVWriter . 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) | |
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) | |
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ố |
| ||||||
Giá trị trả lại |
|
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ố |
| ||||||||||
Giá trị trả lại |
|
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ố |
| ||||||
Giá trị trả lại |
|
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ố |
| ||||||
Giá trị trả lại |
|
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 |
|
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.
Vì 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 |
|
Đặ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ố |
|
StartContainer
WEAVE_ERROR StartContainer( uint64_t tag, TLVType containerType, TLVType & outerContainerType )
VerifyEndOfContainer
WEAVE_ERROR VerifyEndOfContainer( void )