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

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

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

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

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 ที่กำหนดในองค์ประกอบที่จะถูกลบ รวมถึงบริบทที่เป็นโมฆะ * ซึ่งผู้ใช้อาจมีสภาพแวดล้อมเพิ่มเติมสำหรับการเรียกกลับ หากฟังก์ชันประมวลผลองค์ประกอบสำเร็จ จะต้องแสดงผล 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

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

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

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

AvailableDataLength

size_t AvailableDataLength(
  void
) const 

DataLength

size_t DataLength(
  void
) const 

EvictHead

WEAVE_ERROR EvictHead(
  void
)

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

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

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

FinalizeBuffer

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

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

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

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

WeaveCircularTLVBuffer

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

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

รายละเอียด
พารามิเตอร์
[in] inBuffer
ตัวชี้ไปยัง Backback Store สำหรับคิว
[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
ประสบความสำเร็จโดยไม่มีเงื่อนไข