nl::Weave::TLV::WeaveCircularTLVBuffer

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

WeaveCircularTLVBuffer cung cấp bộ nhớ tròn cho nl::Weave::TLV::TLVWriter và nl::Weave::TLVTLVReader.

Tóm tắt

nl::Weave::TLV::TLVWriter có thể ghi số mục nhập TLV không giới hạn vào WeaveCircularTLVBuffer miễn là mỗi mục nhập TLV riêng lẻ hoàn toàn nằm trong bộ nhớ được cung cấp. Tệp nl::Weave::TLV::TLVReader sẽ đọc tối đa kích thước của vùng đệm nhưng sẽ phù hợp với gói bao bọc trong vùng đệm.

Hàm khởi tạo và hàm phá

WeaveCircularTLVBuffer(uint8_t *inBuffer, size_t inBufferLength)
Hàm khởi tạo WeaveCircularTLVBuffer.
WeaveCircularTLVBuffer(uint8_t *inBuffer, size_t inBufferLength, uint8_t *inHead)
Hàm khởi tạo WeaveCircularTLVBuffer.

Loại công khai

ProcessEvictedElementFunct)(WeaveCircularTLVBuffer &inBuffer, void *inAppData, TLVReader &inReader) WEAVE_ERROR(*
Một hàm được gọi để xử lý phần tử TLV trước khi phần tử đó bị loại khỏi nl::Weave::TLV::WeaveCircularTLVBuffer.

Thuộc tính công khai

mAppData
void *
Ngữ cảnh không bắt buộc do người dùng cung cấp, được dùng với lệnh gọi lại đang xử lý phần tử bị loại bỏ.
mImplicitProfileId
uint32_t
mProcessEvictedElement
Lệnh gọi lại không bắt buộc do người dùng cung cấp, giúp xử lý phần tử trước khi loại bỏ phần tử đó khỏi vùng đệm tròn.

Hàm công khai

AvailableDataLength(void) const
size_t
DataLength(void) const
size_t
EvictHead(void)
Loại bỏ phần tử TLV cấp cao nhất cũ nhất trong WeaveCircularTLVBuffer.
FinalizeBuffer(TLVWriter & ioWriter, uint8_t *inBufStart, uint32_t inBufLen)
FinalizeBuffer điều chỉnh trạng thái WeaveCircularTLVBuffer khi hoàn tất đầu ra từ TLVWriter.
GetNewBuffer(TLVWriter & ioWriter, uint8_t *& outBufStart, uint32_t & outBufLen)
Tăng dung lượng cho TLVWriter.
GetNextBuffer(TLVReader & ioReader, const uint8_t *& outBufStart, uint32_t & outBufLen)
Mua thêm dung lượng cho TLVReader.
GetQueue(void) const
uint8_t *
GetQueueSize(void) const
size_t
QueueHead(void) const
uint8_t *
QueueTail(void) const
uint8_t *
SetQueueHead(uint8_t *aQueueHead)
void
SetQueueLength(size_t aQueueLength)
void

Hàm tĩnh công khai

FinalizeBufferFunct(TLVWriter & ioWriter, uintptr_t inBufHandle, uint8_t *inBufStart, uint32_t inBufLen)
Một thành phần phản hồi với thao tác nhấn vào WeaveCircularTLVBuffer::FinalizeBuffer.
GetNewBufferFunct(TLVWriter & ioWriter, uintptr_t & inBufHandle, uint8_t *& outBufStart, uint32_t & outBufLen)
Một thành phần phản hồi với thao tác nhấn vào để tìm nạp thêm không gian cho TLVWriter.
GetNextBufferFunct(TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen)
Một thành phần phản hồi với thao tác nhấn vào WeaveCircularTLVBuffer::GetNextBuffer.

Loại công khai

ProcessEvictedElementFunct

WEAVE_ERROR(* ProcessEvictedElementFunct)(WeaveCircularTLVBuffer &inBuffer, void *inAppData, TLVReader &inReader)

Một hàm được gọi để xử lý phần tử TLV trước khi phần tử đó bị loại khỏi nl::Weave::TLV::WeaveCircularTLVBuffer.

Các hàm thuộc loại này dùng để xử lý phần tử TLV sắp bị loại khỏi vùng đệm. Hàm này sẽ được định vị một nl::Weave::TLV::TLVReader được định vị trên phần tử sắp bị xoá, cũng như ngữ cảnh void * mà có thể người dùng đã cung cấp môi trường bổ sung cho lệnh gọi lại. Nếu đã xử lý thành công phần tử, thì hàm phải trả về giá trị WEAVE_NO_ERROR; điều này biểu thị cho WeaveCircularTLVBuffer có thể loại bỏ phần tử một cách an toàn. Mọi giá trị trả về khác đều được xem là lỗi và sẽ ngăn WeaveCircularTLVBuffer loại bỏ phần tử đang được xem xét.

Lưu ý: Bạn có thể dùng lệnh gọi lại này để buộc WeaveCircularTLVBuffer không loại bỏ phần tử này. Điều này có thể hữu ích trong một số trường hợp khi bạn muốn có vùng đệm tròn bên dưới nhưng không ghi đè bất kỳ phần tử nào trong đó.

Thông tin chi tiết
Các tham số
[in] inBuffer
Tham chiếu đến vùng đệm nơi diễn ra việc loại bỏ
[in] inAppData
Con trỏ đến cấu trúc do người dùng cung cấp chứa ngữ cảnh bổ sung cho lệnh gọi lại này
[in] inReader
Một TLVReader được định vị ở phần tử cần loại trừ.
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công. Phần tử sẽ bị loại.
other
Đã xảy ra lỗi trong quá trình xử lý sự kiện. Phần tử vẫn nằm trong vùng đệm. Hàm ghi đã kích hoạt việc loại bỏ phần tử này sẽ không thành công.

Thuộc tính công khai

mAppData

void * mAppData

Ngữ cảnh không bắt buộc do người dùng cung cấp, được dùng với lệnh gọi lại đang xử lý phần tử bị loại bỏ.

mImplicitProfileId

uint32_t mImplicitProfileId

mProcessEvictedElement

ProcessEvictedElementFunct mProcessEvictedElement

Lệnh gọi lại không bắt buộc do người dùng cung cấp, giúp xử lý phần tử trước khi loại bỏ phần tử đó khỏi vùng đệm tròn.

Xem định nghĩa loại ProcessEvictedElementFunct để biết thêm thông tin về cách triển khai hàm mProcessEvictedElement.

Hàm công khai

AvailableDataLength

size_t AvailableDataLength(
  void
) const 

DataLength

size_t DataLength(
  void
) const 

EvictHead

WEAVE_ERROR EvictHead(
  void
)

Loại bỏ phần tử TLV cấp cao nhất cũ nhất trong WeaveCircularTLVBuffer.

Hàm này xoá phần tử TLV cấp cao nhất cũ nhất trong vùng đệm. Hàm này sẽ gọi lệnh gọi lại đã đăng ký tại mProcessEvictedElement để xử lý phần tử trước khi xoá. Nếu lệnh gọi lại trả về bất kỳ giá trị nào trừ WEAVE_NO_ERROR, thì phần tử này sẽ không bị xoá. Tương tự như vậy, nếu có lỗi nào khác xảy ra, không có phần tử nào trong vùng đệm, v.v., thông số WeaveCircularTLVBuffer cơ bản vẫn không thay đổi.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công.
other
Đối với mọi lỗi khác được lệnh gọi lại hoặc TLVReader trả về.

FinalizeBuffer

WEAVE_ERROR FinalizeBuffer(
  TLVWriter & ioWriter,
  uint8_t *inBufStart,
  uint32_t inBufLen
)

FinalizeBuffer điều chỉnh trạng thái WeaveCircularTLVBuffer khi hoàn tất đầu ra từ TLVWriter.

Hàm này ảnh hưởng đến vị trí của đuôi hàng đợi.

Thông tin chi tiết
Các tham số
[in,out] ioWriter
TLVWriter gọi hàm này
[in] inBufStart
con trỏ đến điểm bắt đầu dữ liệu (từ góc nhìn TLVWriter)
[in] inBufLen
độ dài của dữ liệu trong vùng đệm do inbufStart trỏ đến
Giá trị trả về
WEAVE_NO_ERROR
Vô điều kiện.

GetNewBuffer

WEAVE_ERROR GetNewBuffer(
  TLVWriter & ioWriter,
  uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Tăng dung lượng cho TLVWriter.

Trên thực tế, hàm này loại bỏ một phần tử khỏi vùng đệm tròn và điều chỉnh phần đầu của hàng đợi bộ đệm này

Thông tin chi tiết
Các tham số
[in,out] ioWriter
TLVWriter gọi hàm này
[out] outBufStart
Con trỏ đến vùng đệm mới
[out] outBufLen
Độ dài có thể ghi
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công.
other
Nếu hàm này không thể bỏ qua một phần tử TLV cấp cao nhất hoàn chỉnh.

GetNextBuffer

WEAVE_ERROR GetNextBuffer(
  TLVReader & ioReader,
  const uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Mua thêm dung lượng cho TLVReader.

Dung lượng lưu trữ do WeaveCircularTLVBuffer cung cấp có thể được bao bọc trong bộ đệm. Hàm này cho phép chúng ta so khớp vùng đệm của vùng đệm tròn với các quy tắc ràng buộc của TLVReader. Trình đọc sẽ đọc tối đa mQueueSize byte từ vùng đệm.

Thông tin chi tiết
Các tham số
[in] ioReader
TLVReader gọi hàm này.
[in,out] outBufStart
Tham chiếu đến vùng đệm dữ liệu. Khi trả về, tham số này được đặt thành một giá trị trong vùng đệm này.
[out] outBufLen
Khi trả về, hãy đặt thành số byte liên tục có thể đọc được ra khỏi vùng đệm.
Giá trị trả về
WEAVE_NO_ERROR
Thành công vô điều kiện.

GetQueue

uint8_t * GetQueue(
  void
) const 

GetQueueSize

size_t GetQueueSize(
  void
) const 

QueueHead

uint8_t * QueueHead(
  void
) const 

QueueTail

uint8_t * QueueTail(
  void
) const 

SetQueueHead

void SetQueueHead(
  uint8_t *aQueueHead
)

SetQueueLength

void SetQueueLength(
  size_t aQueueLength
)

WeaveCircularTLVBuffer

 WeaveCircularTLVBuffer(
  uint8_t *inBuffer,
  size_t inBufferLength
)

Hàm khởi tạo WeaveCircularTLVBuffer.

Thông tin chi tiết
Các tham số
[in] inBuffer
Con trỏ đến kho lưu trữ sao lưu cho hàng đợi
[in] inBufferLength
Độ dài, tính bằng byte, của kho lưu trữ sao lưu

WeaveCircularTLVBuffer

 WeaveCircularTLVBuffer(
  uint8_t *inBuffer,
  size_t inBufferLength,
  uint8_t *inHead
)

Hàm khởi tạo WeaveCircularTLVBuffer.

Thông tin chi tiết
Các tham số
[in] inBuffer
Con trỏ đến kho lưu trữ sao lưu cho hàng đợi
[in] inBufferLength
Độ dài, tính bằng byte, của kho lưu trữ sao lưu
[in] inHead
Điểm ban đầu của đầu. Con trỏ inHead phải nằm trong kho lưu trữ sao lưu của vùng đệm tròn, tức là nằm trong inBuffer và &(inBuffer[inBufferLength])

Hàm tĩnh công khai

FinalizeBufferFunct

WEAVE_ERROR FinalizeBufferFunct(
  TLVWriter & ioWriter,
  uintptr_t inBufHandle,
  uint8_t *inBufStart,
  uint32_t inBufLen
)

Một thành phần phản hồi với thao tác nhấn vào WeaveCircularTLVBuffer::FinalizeBuffer.

Thông tin chi tiết
Các tham số
[in,out] ioWriter
TLVWriter gọi hàm này
[in,out] inBufHandle
Ô điều khiển cho đối tượng CircularTLVWriter
[in] inBufStart
con trỏ đến điểm bắt đầu dữ liệu (từ góc nhìn TLVWriter)
[in] inBufLen
độ dài của dữ liệu trong vùng đệm do inbufStart trỏ đến
Giá trị trả về
WEAVE_NO_ERROR
Vô điều kiện.

GetNewBufferFunct

WEAVE_ERROR GetNewBufferFunct(
  TLVWriter & ioWriter,
  uintptr_t & inBufHandle,
  uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Một thành phần phản hồi với thao tác nhấn vào để tìm nạp thêm không gian cho TLVWriter.

Thông tin chi tiết
Các tham số
[in,out] ioWriter
TLVWriter gọi hàm này
[in,out] inBufHandle
Ô điều khiển cho đối tượng CircularTLVWriter
[out] outBufStart
Con trỏ đến vùng đệm mới
[out] outBufLen
Độ dài có thể ghi
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công.
other
Nếu hàm này không thể bỏ qua một phần tử TLV cấp cao nhất hoàn chỉnh.

GetNextBufferFunct

WEAVE_ERROR GetNextBufferFunct(
  TLVReader & ioReader,
  uintptr_t & inBufHandle,
  const uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Một thành phần phản hồi với thao tác nhấn vào WeaveCircularTLVBuffer::GetNextBuffer.

Thông tin chi tiết
Các tham số
[in,out] ioReader
TLVReader gọi hàm này
[in,out] inBufHandle
Ô điều khiển cho đối tượng CircularTLVWriter
[in,out] outBufStart
Tham chiếu đến vùng đệm dữ liệu. Khi trả về, tham số này được đặt thành một giá trị trong vùng đệm này.
[out] outBufLen
Khi trả về, hãy đặt thành số byte liên tục có thể đọc được ra khỏi vùng đệm.
Giá trị trả về
WEAVE_NO_ERROR
Thành công vô điều kiện.