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 不要清除元素。這在許多情況下可能很實用,當您希望擁有基礎環形緩衝區,但不覆寫其中的任何元素時,就可能會發生這種情況。
詳細說明 | |||||||
---|---|---|---|---|---|---|---|
參數 |
|
||||||
傳回值 |
|
公開屬性
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 )
完成從 TLVWriter 輸出的完成時,FinalizeBuffer 就會調整 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 )
利用 Trampoline 為 TLVWriter 擷取更多空間。
詳細說明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|
GetNextBufferFunct
WEAVE_ERROR GetNextBufferFunct( TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen )
指向 WeaveCircularTLVBuffer::GetNextBuffer 的彈跳床。
詳細說明 | |||||||||
---|---|---|---|---|---|---|---|---|---|
參數 |
|
||||||||
傳回值 |
|