nl::
  #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 不移除元素。當您想要有基礎環形緩衝區,但不想覆寫其中的任何元素時,這個功能在許多情況下相當實用。
| 詳細資料 | |||||||
|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||
| 傳回值 | 
 | ||||||
公開屬性
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 會保持不變。
| 詳細資料 | |||||
|---|---|---|---|---|---|
| 傳回值 | 
 | ||||
FinalizeBuffer
WEAVE_ERROR FinalizeBuffer( TLVWriter & ioWriter, uint8_t *inBufStart, uint32_t inBufLen )
FinalizeBuffer 會在 TLVWriter 的輸出內容完成時調整 WeaveCircularTLVBuffer 狀態。
這個函式會影響佇列末端的位置。
| 詳細資料 | |||||||
|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||
| 傳回值 | 
 | ||||||
GetNewBuffer
WEAVE_ERROR GetNewBuffer( TLVWriter & ioWriter, uint8_t *& outBufStart, uint32_t & outBufLen )
GetNextBuffer
WEAVE_ERROR GetNextBuffer( TLVReader & ioReader, const uint8_t *& outBufStart, uint32_t & outBufLen )
取得 TLVReader 使用的額外空間。
WeaveCircularTLVBuffer 提供的儲存空間可能會在緩衝區內環繞。此函式讓我們能夠將圓形緩衝區的緩衝區與 TLVReader 限制進行比對。讀取器最多會從緩衝區讀取 mQueueSize 個位元組。
| 詳細資料 | |||||||
|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||
| 傳回值 | 
 | ||||||
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 建構函式。
| 詳細資料 | |||||
|---|---|---|---|---|---|
| 參數 | 
 | ||||
WeaveCircularTLVBuffer
WeaveCircularTLVBuffer( uint8_t *inBuffer, size_t inBufferLength, uint8_t *inHead )
WeaveCircularTLVBuffer 建構函式。
| 詳細資料 | |||||||
|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||
公開的靜態函式
FinalizeBufferFunct
WEAVE_ERROR FinalizeBufferFunct( TLVWriter & ioWriter, uintptr_t inBufHandle, uint8_t *inBufStart, uint32_t inBufLen )
WeaveCircularTLVBuffer::FinalizeBuffer 的彈跳床。
| 詳細資料 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||||
| 傳回值 | 
 | ||||||||
GetNewBufferFunct
WEAVE_ERROR GetNewBufferFunct( TLVWriter & ioWriter, uintptr_t & inBufHandle, uint8_t *& outBufStart, uint32_t & outBufLen )
用於擷取 TLVWriter 更多空間的彈跳床。
| 詳細資料 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||||
| 傳回值 | 
 | ||||||||
GetNextBufferFunct
WEAVE_ERROR GetNextBufferFunct( TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen )
WeaveCircularTLVBuffer::GetNextBuffer 的彈跳床。
| 詳細資料 | |||||||||
|---|---|---|---|---|---|---|---|---|---|
| 參數 | 
 | ||||||||
| 傳回值 | 
 | ||||||||