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::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ố lượng mục nhập TLV không giới hạn vào WeaveCircularTLVBuffer, miễn là mỗi mục nhập TLV hoàn toàn nằm trong bộ nhớ được cung cấp. nl::Weave::TLV::TLVReader sẽ đọc tối đa kích thước của vùng đệm nhưng sẽ thích ứng với lớp bao bọc bên trong vùng đệm.

Hàm dựng và hàm dựng

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) LỖI_(*
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 *
Một 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 do người dùng cung cấp (không bắt buộc) 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 trong WeaveCircularTLVBuffer.
FinalizeBuffer(TLVWriter & ioWriter, uint8_t *inBufStart, uint32_t inBufLen)
FinalizeBuffer điều chỉnh trạng thái WeaveCircularTLVBuffer khi hoàn thành đầu ra từ TLVWriter.
GetNewBuffer(TLVWriter & ioWriter, uint8_t *& outBufStart, uint32_t & outBufLen)
Có thêm không gian cho TLVWriter.
GetNextBuffer(TLVReader & ioReader, const uint8_t *& outBufStart, uint32_t & outBufLen)
Có 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)
GetNewBufferFunct(TLVWriter & ioWriter, uintptr_t & inBufHandle, uint8_t *& outBufStart, uint32_t & outBufLen)
Sàn nhún để tìm nạp thêm không gian cho TLVWriter.
GetNextBufferFunct(TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen)

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 loại thuộc tính này được dùng để xử lý phần tử TLV sắp bị loại khỏi vùng đệm. Hàm này sẽ được cung cấp một nl::Weave::TLV::TLVReader ở vị trí trên phần tử sắp bị xoá, cũng như ngữ cảnh * void * mà người dùng có thể đã cung cấp thêm môi trường cho lệnh gọi lại. Nếu hàm được xử lý thành công, hàm này phải trả về WEAVE_NO_ERROR. Điều này báo hiệu cho WeaveCircularTLVBuffer rằng phần tử đó có thể bị loại trừ một cách an toàn. Mọi giá trị trả về khác đều được coi là lỗi và sẽ ngăn WeaveCircularTLVBuffer loại bỏ phần tử đang được xem xét.

Lưu ý: Lệnh gọi lại này có thể được dùng để 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 muốn có vùng đệm tròn cơ bản, nhưng không ghi đè bất kỳ phần tử nào trong vùng đệm đó.

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

Thuộc tính công khai

mgzip

void * mAppData

Một 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ỏ.

mimplProfileId

uint32_t mImplicitProfileId

mProcessEvictedElement

ProcessEvictedElementFunct mProcessEvictedElement

Lệnh gọi lại do người dùng cung cấp (không bắt buộc) 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

Dữ liệu có sẵn dài

size_t AvailableDataLength(
  void
) const 

Độ dài dữ liệu

size_t DataLength(
  void
) const 

Đầu Evict

WEAVE_ERROR EvictHead(
  void
)

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

Hàm này xoá phần tử TLV cấp cao 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 ngoài WEAVE_NO_ERROR, thì phần tử này sẽ không bị xóa. Tương tự như vậy, nếu xảy ra lỗi khác không có phần tử nào trong vùng đệm, thì WeaveCircularTLVBuffer cơ bản vẫn không thay đổi.

Thông tin chi tiết
Giá trị trả về
WEAVE_NO_ERROR
Thành công.
other
Trên bất kỳ lỗi nào 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 thành đầ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 đầu dữ liệu (từ góc nhìn TLVWriter)
[in] inBufLen
độ dài dữ liệu trong vùng đệm được inbufStart trỏ đến
Giá trị trả về
WEAVE_NO_ERROR
Vô điều kiện.

Nhận bộ đệm mới

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

Có thêm không gian cho TLVWriter.

Trên thực tế, hàm này sẽ loại trừ 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ỏ trỏ đến vùng đệm mới
[out] outBufLen
Độ dài có sẵn để viết
Giá trị trả về
WEAVE_NO_ERROR
Thành công.
other
Nếu hàm không thể bỏ qua phần tử TLV cấp cao nhất.

GetBuffer

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

Có thêm dung lượng cho TLVReader.

Bộ nhớ 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 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ề, giá trị này được đặt thành một giá trị trong vùng đệm này.
[out] outBufLen
Khi trả về, đặt thành số byte liên tục có thể được đọc ra từ vùng đệm.
Giá trị trả về
WEAVE_NO_ERROR
Thành công vô điều kiện.

Nhận hàng đợi

uint8_t * GetQueue(
  void
) const 

Nhận kích thước hàng đợi

size_t GetQueueSize(
  void
) const 

Tiêu đề hàng đợi

uint8_t * QueueHead(
  void
) const 

Đuôi đợi

uint8_t * QueueTail(
  void
) const 

SetQueueHead

void SetQueueHead(
  uint8_t *aQueueHead
)

Đặt độ dài hàng đợi

void SetQueueLength(
  size_t aQueueLength
)

WeaveCirularTLVBuffer

 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ỏ trỏ đến cửa hàng 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

WeaveCirularTLVBuffer

 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ỏ trỏ đến cửa hàng 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 đầu cho phần đầu. Con trỏ inHead phải nằm trong kho lưu trữ sao lưu cho vùng đệm tròn, tức là 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
)

Sàn nhún cho 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
Tên người dùng cho đối tượng CircularTLVWriter
[in] inBufStart
con trỏ đến đầu dữ liệu (từ góc nhìn TLVWriter)
[in] inBufLen
độ dài dữ liệu trong vùng đệm được 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
)

Sàn nhún để 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
Tên người dùng cho đối tượng CircularTLVWriter
[out] outBufStart
Con trỏ trỏ đến vùng đệm mới
[out] outBufLen
Độ dài có sẵn để viết
Giá trị trả về
WEAVE_NO_ERROR
Thành công.
other
Nếu hàm không thể bỏ qua phần tử TLV cấp cao nhất.

GetNextBufferFunct

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

Sàn nhún cho 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
Tên người dùng cho đối tượng CircularTLVWriter
[in,out] outBufStart
Tham chiếu đến vùng đệm dữ liệu. Khi trả về, giá trị này được đặt thành một giá trị trong vùng đệm này.
[out] outBufLen
Khi trả về, đặt thành số byte liên tục có thể được đọc ra từ vùng đệm.
Giá trị trả về
WEAVE_NO_ERROR
Thành công vô điều kiện.