nl::Weave::TLV::WeaveCircularTLVBuffer

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

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

摘要

nl::Weave::TLV::TLVWriter 可以為 WeaveCircularTLVBuffer 撰寫無界限的 TLV 項目,但是前提是每個個別 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(*)
這個函式會呼叫此函式,先處理 TLV 元素,再從 nl::Weave::TLV::WeaveCircularTLVBuffer 移除。

公開屬性

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)
完成從 TLVWriter 輸出的完成時,FinalizeBuffer 就會調整 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)
利用 Trampoline 為 TLVWriter 擷取更多空間。
GetNextBufferFunct(TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen)

公開類型

ProcessEvictedElementFunct

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

這個函式會呼叫此函式,先處理 TLV 元素,再從 nl::Weave::TLV::WeaveCircularTLVBuffer 移除。

這個類型的函式會用於處理即將從緩衝區中移除的 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
)

完成從 TLVWriter 輸出的完成時,FinalizeBuffer 就會調整 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
)

利用 Trampoline 為 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
無條件成功。