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_(*
ฟังก์ชันที่ถูกเรียกใช้ให้ประมวลผลองค์ประกอบ TLV ก่อนที่จะถูกนำออกจาก nl::Weave::TLV::WeaveCircularTLVBuffer

แอตทริบิวต์สาธารณะ

mAppData
void *
บริบทที่ไม่บังคับที่ผู้ใช้ระบุเพื่อใช้กับการประมวลผล Callback ขององค์ประกอบที่นำออก
mImplicitProfileId
uint32_t
mProcessEvictedElement
Callback ที่ไม่บังคับที่ผู้ใช้ระบุซึ่งประมวลผลองค์ประกอบก่อนที่จะนำออกจากบัฟเฟอร์วงกลม

ฟังก์ชันสาธารณะ

AvailableDataLength(void) const
size_t
DataLength(void) const
size_t
EvictHead(void)
ปลดองค์ประกอบ TLV ระดับบนสุดที่เก่าที่สุดใน WeaveCircularTLVBuffer
FinalizeBuffer(TLVWriter & ioWriter, uint8_t *inBufStart, uint32_t inBufLen)
FinalizeBuffer ปรับสถานะ WeaveCircularTLVBuffer เมื่อเอาต์พุตจาก TLVWriter เสร็จสมบูรณ์
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)
แทรมโพลีนไปยัง WeaveCircularTLVBuffer::FinalizeBuffer
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)
แทรมโพลีนไปยัง WeaveCircularTLVBuffer::GetNextBuffer

ประเภทสาธารณะ

ProcessEvictedElementFunct

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

ฟังก์ชันที่ถูกเรียกใช้ให้ประมวลผลองค์ประกอบ TLV ก่อนที่จะถูกนำออกจาก nl::Weave::TLV::WeaveCircularTLVBuffer

ฟังก์ชันของประเภทนี้ใช้เพื่อประมวลผลองค์ประกอบ TLV ที่กำลังจะออกจากบัฟเฟอร์ ฟังก์ชันดังกล่าวจะได้รับ nl::Weave::TLV::TLVReader ที่อยู่ในตำแหน่งบนองค์ประกอบที่กำลังจะถูกลบ รวมถึงบริบท "เป็นโมฆะ" * ที่ผู้ใช้อาจให้สภาพแวดล้อมเพิ่มเติมสำหรับ Callback ถ้าฟังก์ชันประมวลผลองค์ประกอบสำเร็จแล้ว จะต้องแสดงผล WEAVE_NO_ERROR ซึ่งจะแสดงถึง WeaveCircularTLVBuffer ว่าองค์ประกอบนั้นอาจถูกนําออกได้อย่างปลอดภัย ผลลัพธ์อื่นๆ จะถือว่าเป็นข้อผิดพลาดและจะป้องกันไม่ให้ WeaveCircularTLVBuffer เอาองค์ประกอบออกภายใต้การพิจารณา

หมายเหตุ: การเรียกกลับนี้อาจใช้เพื่อบังคับให้ WeaveCircularTLVBuffer ไม่ขับองค์ประกอบออก ซึ่งอาจเป็นประโยชน์ในบางสถานการณ์ เมื่อต้องการให้มีบัฟเฟอร์รูปวงกลมที่ใช้งานอยู่ แต่ไม่ได้ลบล้างองค์ประกอบใดๆ ที่อยู่ภายใน

รายละเอียด
พารามิเตอร์
[in] inBuffer
การอ้างอิงไปยังบัฟเฟอร์ที่มีการปลดออก
[in] inAppData
ตัวชี้ไปยังโครงสร้างที่ผู้ใช้ระบุซึ่งมีบริบทเพิ่มเติมสำหรับ Callback นี้
[in] inReader
TLVReader ที่อยู่ในตำแหน่งที่จะนำออก
ผลลัพธ์
WEAVE_NO_ERROR
สำเร็จแล้ว องค์ประกอบจะถูกลบ
other
เกิดข้อผิดพลาดระหว่างการประมวลผลเหตุการณ์ องค์ประกอบจะยังอยู่ในบัฟเฟอร์ ฟังก์ชันการเขียนที่ทริกเกอร์การปลดองค์ประกอบนี้จะล้มเหลว

แอตทริบิวต์สาธารณะ

mAppData

void * mAppData

บริบทที่ไม่บังคับที่ผู้ใช้ระบุเพื่อใช้กับการประมวลผล Callback ขององค์ประกอบที่นำออก

mImplicitProfileId

uint32_t mImplicitProfileId

mProcessEvictedElement

ProcessEvictedElementFunct mProcessEvictedElement

Callback ที่ไม่บังคับที่ผู้ใช้ระบุซึ่งประมวลผลองค์ประกอบก่อนที่จะนำออกจากบัฟเฟอร์วงกลม

ดูคำจำกัดความของประเภท ProcessEvictedElementFunct คือข้อมูลเพิ่มเติมเกี่ยวกับการใช้ฟังก์ชัน mProcessEvictedElement

ฟังก์ชันสาธารณะ

AvailableDataLength

size_t AvailableDataLength(
  void
) const 

DataLength

size_t DataLength(
  void
) const 

EvictHead

WEAVE_ERROR EvictHead(
  void
)

ปลดองค์ประกอบ TLV ระดับบนสุดที่เก่าที่สุดใน WeaveCircularTLVBuffer

ฟังก์ชันนี้จะนําองค์ประกอบ TLV ระดับบนสุดที่เก่าที่สุดออกจากบัฟเฟอร์ ฟังก์ชันนี้จะเรียกใช้ Callback ที่ลงทะเบียนไว้ที่ mProcessEvictedElement เพื่อประมวลผลองค์ประกอบก่อนที่จะนำออก หาก Callback ส่งคืนผลลัพธ์ใดๆ ยกเว้น WEAVE_NO_ERROR องค์ประกอบจะไม่ถูกนำออก ในทำนองเดียวกัน หากข้อผิดพลาดอื่นๆ เกิดขึ้นไม่มีองค์ประกอบภายในบัฟเฟอร์ หรือ WeaveCircularTLVBuffer ที่มีอยู่จะไม่เปลี่ยนแปลง

รายละเอียด
ผลลัพธ์
WEAVE_NO_ERROR
สำเร็จแล้ว
other
สำหรับข้อผิดพลาดอื่นๆ ที่แสดงผลโดย Callback หรือ TLVReader

FinalizeBuffer

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

FinalizeBuffer ปรับสถานะ WeaveCircularTLVBuffer เมื่อเอาต์พุตจาก TLVWriter เสร็จสมบูรณ์

ฟังก์ชันนี้จะส่งผลต่อตำแหน่งของช่วงท้ายของคิว

รายละเอียด
พารามิเตอร์
[in,out] ioWriter
[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
[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
ตัวชี้ไปยัง Backing Store สำหรับคิว
[in] inBufferLength
ความยาวเป็นไบต์ของที่เก็บข้อมูลสำรอง

WeaveCircularTLVBuffer

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

เครื่องมือสร้าง WeaveCircularTLVBuffer

รายละเอียด
พารามิเตอร์
[in] inBuffer
ตัวชี้ไปยัง Backing Store สำหรับคิว
[in] inBufferLength
ความยาวเป็นไบต์ของที่เก็บข้อมูลสำรอง
[in] inHead
จุดเริ่มของศีรษะ ตัวชี้ inHead จะต้องอยู่ในที่เก็บสำรองของบัฟเฟอร์รูปวงกลม ซึ่งก็คือภายใน inBuffer และ &(inBufferLength[inBufferLength])

ฟังก์ชันสาธารณะแบบคงที่

FinalizeBufferFunct

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

แทรมโพลีนไปยัง WeaveCircularTLVBuffer::FinalizeBuffer

รายละเอียด
พารามิเตอร์
[in,out] ioWriter
[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
[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
สำเร็จโดยไม่มีเงื่อนไข