nl::Weave::TLV::WeaveCircularTLVBuffer

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

WeaveCircularTLVBuffer 可為 nl::Weave::TLV::TLVWriter 和 nl::Weave::TLVTLVReader 提供循環儲存空間。

摘要

nl::Weave::TLV::TLVWriter 可以將無限制的 TLV 項目寫入 WeaveCircularTLVBuffer,但前提是每個 TLV 項目皆不超過提供的儲存空間。nl::Weave::TLV::TLVReader 會以大部分緩衝區大小讀取,但會在緩衝區內納入環繞。

建構函式和解構函式

WeaveCircularTLVBuffer(uint8_t *inBuffer, size_t inBufferLength)
WeaveCircularTLVBuffer 建構函式。
WeaveCircularTLVBuffer(uint8_t *inBuffer, size_t inBufferLength, uint8_t *inHead)
WeaveCircularTLVBuffer 建構函式。

公開類型

ProcessEvictedElementFunct)(WeaveCircularTLVBuffer &inBuffer, void *inAppData, TLVReader &inReader) WEAVE_ERROR(*)
在從 nl::Weave::TLV::WeaveCircularTLVBuffer 中剔除之前,會呼叫用於處理 TLV 元素的函式。

公開屬性

mAppData
void *
使用者提供的選擇性內容,用於處理已清除元素的回呼。
mImplicitProfileId
uint32_t
mProcessEvictedElement
這是由使用者提供的選用回呼,會先處理元素,接著將其從環形緩衝區移除。

公開函式

AvailableDataLength(void) const
size_t
DataLength(void) const
size_t
EvictHead(void)
剔除 WeaveCircularTLVBuffer 中最舊的頂層 TLV 元素。
FinalizeBuffer(TLVWriter & ioWriter, uint8_t *inBufStart, uint32_t inBufLen)
FinalizeBuffer 會在 TLVWriter 的輸出內容完成時調整 WeaveCircularTLVBuffer 狀態。
GetNewBuffer(TLVWriter & ioWriter, uint8_t *& outBufStart, uint32_t & outBufLen)
取得 TLVWriter 的額外空間。
GetNextBuffer(TLVReader & ioReader, const uint8_t *& outBufStart, uint32_t & outBufLen)
取得 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

公開的靜態函式

FinalizeBufferFunct(TLVWriter & ioWriter, uintptr_t inBufHandle, uint8_t *inBufStart, uint32_t inBufLen)
GetNewBufferFunct(TLVWriter & ioWriter, uintptr_t & inBufHandle, uint8_t *& outBufStart, uint32_t & outBufLen)
用於擷取 TLVWriter 更多空間的彈跳床。
GetNextBufferFunct(TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen)

公開類型

ProcessEvictedElementFunct

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

在從 nl::Weave::TLV::WeaveCircularTLVBuffer 中剔除之前,會呼叫用於處理 TLV 元素的函式。

這個類型的函式可用來處理即將從緩衝區中移除的 TLV 元素。該函式會提供 nl::Weave::TLV::TLVReader 並放在即將刪除的元素上,以及 void * 結構定義 (使用者可能為回呼提供其他環境)。如果函式成功處理了元素,必須傳回 WEAVE_NO_ERROR;這會指出元素可安全移除的 WeaveCircularTLVBuffer。其他任何回傳值都會視為錯誤,且會防止 WeaveCircularTLVBuffer 移除屬於考慮的元素。

注意:這個回呼可用來強制 WeaveCircularTLVBuffer 不移除元素。當您想要有基礎環形緩衝區,但不想覆寫其中的任何元素時,這個功能在許多情況下相當實用。

詳細資料
參數
[in] inBuffer
執行移除作業的緩衝區參照
[in] inAppData
使用者所提供結構的指標,內含此回呼的其他背景資訊
[in] inReader
置於要撤銷元素的 TLVReader
傳回值
WEAVE_NO_ERROR
成功時。元素將遭到撤銷。
other
處理事件時發生錯誤。元素會留在緩衝區中。觸發這項元素移除作業的寫入函式會失敗。

公開屬性

mAppData

void * mAppData

使用者提供的選擇性內容,用於處理已清除元素的回呼。

mImplicitProfileId

uint32_t mImplicitProfileId

mProcessEvictedElement

ProcessEvictedElementFunct mProcessEvictedElement

這是由使用者提供的選用回呼,會先處理元素,接著將其從環形緩衝區移除。

如要進一步瞭解如何實作 mProcessEvictedElement 函式,請參閱 ProcessEvictedElementFunct 類型定義。

公開函式

AvailableDataLength

size_t AvailableDataLength(
  void
) const 

DataLength

size_t DataLength(
  void
) const 

EvictHead

WEAVE_ERROR EvictHead(
  void
)

剔除 WeaveCircularTLVBuffer 中最舊的頂層 TLV 元素。

這個函式會移除緩衝區中最舊的頂層 TLV 元素。該函式會呼叫在 mProcessEvictedElement 中註冊的回呼,在移除前處理元素。如果回呼傳回 WEAVE_NO_ERROR 以外的任何內容,則元素不會移除。同樣地,如果緩衝區中沒有任何其他錯誤,基礎的 WeaveCircularTLVBuffer 會保持不變。

詳細資料
傳回值
WEAVE_NO_ERROR
成功時。
other
回呼或 TLVReader 傳回的任何其他錯誤。

FinalizeBuffer

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

FinalizeBuffer 會在 TLVWriter 的輸出內容完成時調整 WeaveCircularTLVBuffer 狀態。

這個函式會影響佇列末端的位置。

詳細資料
參數
[in,out] ioWriter
TLVWriter 呼叫這個函式
[in] inBufStart
指向資料開頭的指標 (從TLVWriter視角)
[in] inBufLen
inbufStart 所指向的緩衝區內資料的長度
傳回值
WEAVE_NO_ERROR
無條件。

GetNewBuffer

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

取得 TLVWriter 的額外空間。

實際上,此函式會從環形緩衝區收回元素,並調整這個緩衝區佇列的標頭

詳細資料
參數
[in,out] ioWriter
TLVWriter 呼叫這個函式
[out] outBufStart
新緩衝區的指標
[out] outBufLen
可寫入的時間長度
傳回值
WEAVE_NO_ERROR
成功時。
other
如果函式無法縮減完整的頂層 TLV 元素。

GetNextBuffer

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

取得 TLVReader 使用的額外空間。

WeaveCircularTLVBuffer 提供的儲存空間可能會在緩衝區內環繞。此函式讓我們能夠將圓形緩衝區的緩衝區與 TLVReader 限制進行比對。讀取器最多會從緩衝區讀取 mQueueSize 個位元組。

詳細資料
參數
[in] ioReader
TLVReader 呼叫這個函式。
[in,out] outBufStart
資料緩衝區的參照。返回時,則會設為這個緩衝區中的值。
[out] outBufLen
傳回時,設定可從緩衝區讀取的連續位元組數。
傳回值
WEAVE_NO_ERROR
無條件使用。

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
)

WeaveCircularTLVBuffer 建構函式。

詳細資料
參數
[in] inBuffer
指向佇列備份儲存庫的指標
[in] inBufferLength
備份儲存庫的長度 (以位元組為單位)

WeaveCircularTLVBuffer

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

WeaveCircularTLVBuffer 建構函式。

詳細資料
參數
[in] inBuffer
指向佇列備份儲存庫的指標
[in] inBufferLength
備份儲存庫的長度 (以位元組為單位)
[in] inHead
頭部的起點。inHead 指標必須位於背景緩衝區的背後商店內,例如 inBuffer 和 &(inBuffer[inBufferLength])

公開的靜態函式

FinalizeBufferFunct

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

WeaveCircularTLVBuffer::FinalizeBuffer 的彈跳床。

詳細資料
參數
[in,out] ioWriter
TLVWriter 呼叫這個函式
[in,out] inBufHandle
CircularTLVWriter 物件的控制代碼
[in] inBufStart
指向資料開頭的指標 (從TLVWriter視角)
[in] inBufLen
inbufStart 所指向的緩衝區內資料的長度
傳回值
WEAVE_NO_ERROR
無條件。

GetNewBufferFunct

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

用於擷取 TLVWriter 更多空間的彈跳床。

詳細資料
參數
[in,out] ioWriter
TLVWriter 呼叫這個函式
[in,out] inBufHandle
CircularTLVWriter 物件的控制代碼
[out] outBufStart
新緩衝區的指標
[out] outBufLen
可寫入的時間長度
傳回值
WEAVE_NO_ERROR
成功時。
other
如果函式無法縮減完整的頂層 TLV 元素。

GetNextBufferFunct

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

WeaveCircularTLVBuffer::GetNextBuffer 的彈跳床。

詳細資料
參數
[in,out] ioReader
TLVReader 呼叫這個函式
[in,out] inBufHandle
CircularTLVWriter 物件的控制代碼
[in,out] outBufStart
資料緩衝區的參照。返回時,則會設為這個緩衝區中的值。
[out] outBufLen
傳回時,設定可從緩衝區讀取的連續位元組數。
傳回值
WEAVE_NO_ERROR
無條件使用。