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

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

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 bị loại khỏi nl::Weave::TLV::WeaveCircularTLVBuffer.

Các 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 để sử dụng cùng với lệnh gọi lại giúp 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 sẽ xử lý phần tử trước khi loại 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 thành đầu ra từ TLVWriter.
GetNewBuffer(TLVWriter & ioWriter, uint8_t *& outBufStart, uint32_t & outBufLen)
Lấy thêm không gian cho TLVWriter.
GetNextBuffer(TLVReader & ioReader, const uint8_t *& outBufStart, uint32_t & outBufLen)
Mua thêm không gian 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 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 bị loại khỏi nl::Weave::TLV::WeaveCircularTLVBuffer.

Các hàm thuộc loại 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 được đặt 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 môi trường bổ sung cho lệnh gọi lại. Nếu hàm xử lý phần tử thành công, hàm phải trả về WEAVE_NO_ERROR; điều này cho biết WeaveCircularTLVBuffer rằng phần tử này có thể được loại bỏ 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ể 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 bạn muốn có một vùng đệm tròn cơ bản nhưng không ghi đè bất kỳ phần tử nào trong đó.

Thông tin chi tiết
Tham số
[in] inBuffer
Thông tin tham chiếu đến vùng đệm nơi quá trình loại bỏ diễn ra
[in] inAppData
Con trỏ đến cấu trúc do người dùng cung cấp có chứa ngữ cảnh bổ sung cho lệnh gọi lại này
[in] inReader
TLVReader được đặt trong phần tử cần loại bỏ.
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công. Phần tử sẽ bị loại bỏ.
other
Đã xảy ra lỗi trong quá trình xử lý sự kiện. Phần tử vẫn ở 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.

Các 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 để sử dụng cùng với lệnh gọi lại giúp 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 sẽ xử lý phần tử trước khi loại phần tử đó khỏi vùng đệm tròn.

Hãy 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ự, nếu bất kỳ lỗi nào khác xảy ra mà không có phần tử nào trong vùng đệm, v.v. thì WeaveCircularTLVBuffer cơ bản sẽ 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 bất kỳ lỗi nào khác do 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
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 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
)

Lấy thêm không gian cho TLVWriter.

Trên thực tế, hàm này sẽ 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
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 sẵn có để viết
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công.
other
Nếu hàm không thể rút gọn 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 không gian cho TLVReader.

Bộ nhớ do WeaveCircularTLVBuffer cung cấp có thể bao bọc trong vùng đệm. Hàm này cung cấp cho chúng ta khả năng khớp bộ đệ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
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ề, hãy đặt thành số byte liên tục có thể đọc được từ vùng đệm.
Giá trị trả về
WEAVE_NO_ERROR
Thành công một cách 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
Tham số
[in] inBuffer
Con trỏ 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
Tham số
[in] inBuffer
Con trỏ 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 đầu của 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
)

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
Tham số
[in,out] ioWriter
TLVWriter gọi hàm này
[in,out] inBufHandle
Một ô điều khiển của đố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 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 thêm không gian cho TLVWriter.

Thông tin chi tiết
Tham số
[in,out] ioWriter
TLVWriter gọi hàm này
[in,out] inBufHandle
Một ô điều khiển của đối tượng CircularTLVWriter
[out] outBufStart
Con trỏ đến vùng đệm mới
[out] outBufLen
Độ dài sẵn có để viết
Giá trị trả về
WEAVE_NO_ERROR
Khi thành công.
other
Nếu hàm không thể rút gọn 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
Tham số
[in,out] ioReader
TLVReader gọi hàm này
[in,out] inBufHandle
Một ô điều khiển của đố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ề, hãy đặt thành số byte liên tục có thể đọc được từ vùng đệm.
Giá trị trả về
WEAVE_NO_ERROR
Thành công một cách vô điều kiện.