nl::Weave::TLV::WeaveCircularTLVBuffer

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

WeaveCircularTLVBuffer bietet kreisförmigen Speicher für nl::Weave::TLV::TLVWriter und nl::Weave::TLVTLVReader.

Zusammenfassung

nl::Weave::TLV::TLVWriter kann eine unbegrenzte Anzahl von TLV-Einträgen in den WeaveCircularTLVBuffer schreiben, solange jeder einzelne TLV-Eintrag vollständig in den verfügbaren Speicher passt. nl::Weave::TLV::TLVReader liest höchstens die Größe des Zwischenspeichers, berücksichtigt aber den Wraparound innerhalb des Zwischenspeichers.

Konstruktoren und Zerstörer

WeaveCircularTLVBuffer(uint8_t *inBuffer, size_t inBufferLength)
Konstruktor WeaveCircularTLVBuffer verwendet werden.
WeaveCircularTLVBuffer(uint8_t *inBuffer, size_t inBufferLength, uint8_t *inHead)
Konstruktor WeaveCircularTLVBuffer verwendet werden.

Öffentliche Typen

ProcessEvictedElementFunct)(WeaveCircularTLVBuffer &inBuffer, void *inAppData, TLVReader &inReader) WEAVE_ERROR(*
Eine Funktion, die aufgerufen wird, um ein TLV-Element zu verarbeiten, bevor es aus nl::Weave::TLV::WeaveCircularTLVBuffer entfernt wird.

Öffentliche Attribute

mAppData
void *
Ein optionaler, vom Nutzer bereitgestellter Kontext, der mit der Callback-Verarbeitung des entfernten Elements verwendet wird.
mImplicitProfileId
uint32_t
mProcessEvictedElement
Ein optionaler, vom Nutzer bereitgestellter Callback, der das Element verarbeitet, bevor es aus dem runden Zwischenspeicher entfernt wird.

Öffentliche Funktionen

AvailableDataLength(void) const
size_t
DataLength(void) const
size_t
EvictHead(void)
Entfernt das älteste TLV-Element der obersten Ebene in WeaveCircularTLVBuffer.
FinalizeBuffer(TLVWriter & ioWriter, uint8_t *inBufStart, uint32_t inBufLen)
FinalizeBuffer passt den WeaveCircularTLVBuffer-Status nach Abschluss der Ausgabe von TLVWriter an.
GetNewBuffer(TLVWriter & ioWriter, uint8_t *& outBufStart, uint32_t & outBufLen)
Holen Sie sich zusätzlichen Speicherplatz für den TLVWriter.
GetNextBuffer(TLVReader & ioReader, const uint8_t *& outBufStart, uint32_t & outBufLen)
Holen Sie sich zusätzlichen Speicherplatz für den 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

Öffentliche statische Funktionen

FinalizeBufferFunct(TLVWriter & ioWriter, uintptr_t inBufHandle, uint8_t *inBufStart, uint32_t inBufLen)
GetNewBufferFunct(TLVWriter & ioWriter, uintptr_t & inBufHandle, uint8_t *& outBufStart, uint32_t & outBufLen)
Ein Trampolin, um mehr Platz für den TLVWriter zu schaffen
GetNextBufferFunct(TLVReader & ioReader, uintptr_t & inBufHandle, const uint8_t *& outBufStart, uint32_t & outBufLen)

Öffentliche Typen

ProcessEvictedElementFunct

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

Eine Funktion, die aufgerufen wird, um ein TLV-Element zu verarbeiten, bevor es aus nl::Weave::TLV::WeaveCircularTLVBuffer entfernt wird.

Funktionen dieses Typs werden verwendet, um ein TLV-Element zu verarbeiten, das aus dem Zwischenspeicher entfernt werden soll. Die Funktion erhält einen nl::Weave::TLV::TLVReader-Wert auf dem Element, das gelöscht werden soll, sowie einen void *-Kontext, in dem der Nutzer möglicherweise eine zusätzliche Umgebung für den Callback bereitgestellt hat. Wenn das Element erfolgreich verarbeitet wurde, muss WEAVE_NO_ERROR zurückgegeben werden. Das bedeutet für den WeaveCircularTLVBuffer, dass das Element sicher entfernt werden kann. Jeder andere Rückgabewert wird als Fehler behandelt und verhindert, dass WeaveCircularTLVBuffer das betreffende Element entfernt.

Hinweis: Mit diesem Callback kann WeaveCircularTLVBuffer gezwungen werden, das Element nicht zu entfernen. Dies kann in einer Reihe von Situationen nützlich sein, wenn ein zugrunde liegender kreisförmiger Puffer vorhanden sein soll, aber keine darin enthaltenen Elemente überschrieben werden sollen.

Details
Parameter
[in] inBuffer
Ein Verweis auf den Zwischenspeicher, aus dem die Bereinigung erfolgt
[in] inAppData
Ein Zeiger auf die vom Nutzer bereitgestellte Struktur, die zusätzlichen Kontext für diesen Callback enthält
[in] inReader
Ein TLVReader, der sich bei dem Element befindet, das entfernt werden soll.
Rückgabewerte
WEAVE_NO_ERROR
Bei Erfolg. Das Element wird entfernt.
other
Bei der Verarbeitung des Ereignisses ist ein Fehler aufgetreten. Das Element bleibt im Zwischenspeicher. Die Schreibfunktion, die diese Elementbereinigung ausgelöst hat, schlägt fehl.

Öffentliche Attribute

mAppData

void * mAppData

Ein optionaler, vom Nutzer bereitgestellter Kontext, der mit der Callback-Verarbeitung des entfernten Elements verwendet wird.

mImplicitProfileId

uint32_t mImplicitProfileId

mProcessEvictedElement

ProcessEvictedElementFunct mProcessEvictedElement

Ein optionaler, vom Nutzer bereitgestellter Callback, der das Element verarbeitet, bevor es aus dem runden Zwischenspeicher entfernt wird.

Weitere Informationen zur Implementierung der Funktion mProcessEconcedElement finden Sie in der Typdefinition ProcessEgainedElementFunct.

Öffentliche Funktionen

AvailableDataLength

size_t AvailableDataLength(
  void
) const 

DataLength

size_t DataLength(
  void
) const 

EvictHead

WEAVE_ERROR EvictHead(
  void
)

Entfernt das älteste TLV-Element der obersten Ebene in WeaveCircularTLVBuffer.

Diese Funktion entfernt das älteste TLV-Element der obersten Ebene im Zwischenspeicher. Die Funktion ruft den Callback auf, der unter mProcessEvictedElement registriert ist, um das Element vor dem Entfernen zu verarbeiten. Wenn der Callback etwas anderes als WEAVE_NO_ERROR zurückgibt, wird das Element nicht entfernt. Falls ein anderer Fehler auftritt, bleiben keine Elemente im Zwischenspeicher usw. der zugrunde liegende WeaveCircularTLVBuffer unverändert.

Details
Rückgabewerte
WEAVE_NO_ERROR
Bei Erfolg.
other
Bei jedem anderen Fehler, der entweder vom Callback oder vom TLVReader zurückgegeben wird

FinalizeBuffer

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

FinalizeBuffer passt den WeaveCircularTLVBuffer-Status nach Abschluss der Ausgabe von TLVWriter an.

Diese Funktion wirkt sich auf die Position des Warteschlangenendes aus.

Details
Parameter
[in,out] ioWriter
TLVWriter zum Aufrufen dieser Funktion
[in] inBufStart
Zeiger zum Anfang der Daten (aus Sicht von TLVWriter)
[in] inBufLen
Länge der Daten im Zwischenspeicher, auf die inbufStart verweist
Rückgabewerte
WEAVE_NO_ERROR
Bedingungslos.

GetNewBuffer

WEAVE_ERROR GetNewBuffer(
  TLVWriter & ioWriter,
  uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Holen Sie sich zusätzlichen Speicherplatz für den TLVWriter.

Tatsächlich entfernt die Funktion ein Element aus dem runden Zwischenspeicher und passt den Head dieser Zwischenspeicherwarteschlange an

Details
Parameter
[in,out] ioWriter
TLVWriter zum Aufrufen dieser Funktion
[out] outBufStart
Zeiger auf den neuen Zwischenspeicher
[out] outBufLen
Die verfügbare Länge für den Text
Rückgabewerte
WEAVE_NO_ERROR
Bei Erfolg.
other
Mit der Funktion konnte kein vollständiges TLV-Element der obersten Ebene ausgeblendet werden.

GetNextBuffer

WEAVE_ERROR GetNextBuffer(
  TLVReader & ioReader,
  const uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Holen Sie sich zusätzlichen Speicherplatz für den TLVReader.

Der durch WeaveCircularTLVBuffer bereitgestellte Speicher kann innerhalb des Zwischenspeichers umlaufen. Diese Funktion bietet die Möglichkeit, die Zwischenspeicherung des kreisförmigen Zwischenspeichers an die TLVReader-Einschränkungen abzugleichen. Der Reader liest höchstens mQueueSize Byte aus dem Zwischenspeicher.

Details
Parameter
[in] ioReader
TLVReader verwendet, der diese Funktion aufruft.
[in,out] outBufStart
Der Verweis auf den Datenpuffer. Bei der Rückgabe wird er auf einen Wert innerhalb dieses Zwischenspeichers gesetzt.
[out] outBufLen
Legen Sie diesen Wert bei der Rückgabe auf die Anzahl der kontinuierlichen Byte fest, die aus dem Zwischenspeicher gelesen werden konnten.
Rückgabewerte
WEAVE_NO_ERROR
Es ist bedingungslos erfolgreich.

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
)

Konstruktor WeaveCircularTLVBuffer verwendet werden.

Details
Parameter
[in] inBuffer
Ein Zeiger auf den Sicherungsspeicher für die Warteschlange
[in] inBufferLength
Länge des Sicherungsspeichers in Byte

WeaveCircularTLVBuffer

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

Konstruktor WeaveCircularTLVBuffer verwendet werden.

Details
Parameter
[in] inBuffer
Ein Zeiger auf den Sicherungsspeicher für die Warteschlange
[in] inBufferLength
Länge des Sicherungsspeichers in Byte
[in] inHead
Anfangspunkt für den Kopf. Der inHead-Zeiger muss sich in den Sicherungsspeicher für den kreisförmigen Zwischenspeicher befinden, d.h. in inBuffer und &(inBuffer[inBufferLength])

Öffentliche statische Funktionen

FinalizeBufferFunct

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

Ein Trampolin zu WeaveCircularTLVBuffer::FinalizeBuffer

Details
Parameter
[in,out] ioWriter
TLVWriter zum Aufrufen dieser Funktion
[in,out] inBufHandle
Einen Handle für das CircularTLVWriter-Objekt
[in] inBufStart
Zeiger zum Anfang der Daten (aus Sicht von TLVWriter)
[in] inBufLen
Länge der Daten im Zwischenspeicher, auf die inbufStart verweist
Rückgabewerte
WEAVE_NO_ERROR
Bedingungslos.

GetNewBufferFunct

WEAVE_ERROR GetNewBufferFunct(
  TLVWriter & ioWriter,
  uintptr_t & inBufHandle,
  uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Ein Trampolin, um mehr Platz für den TLVWriter zu schaffen

Details
Parameter
[in,out] ioWriter
TLVWriter zum Aufrufen dieser Funktion
[in,out] inBufHandle
Einen Handle für das CircularTLVWriter-Objekt
[out] outBufStart
Zeiger auf den neuen Zwischenspeicher
[out] outBufLen
Die verfügbare Länge für den Text
Rückgabewerte
WEAVE_NO_ERROR
Bei Erfolg.
other
Mit der Funktion konnte kein vollständiges TLV-Element der obersten Ebene ausgeblendet werden.

GetNextBufferFunct

WEAVE_ERROR GetNextBufferFunct(
  TLVReader & ioReader,
  uintptr_t & inBufHandle,
  const uint8_t *& outBufStart,
  uint32_t & outBufLen
)

Ein Trampolin zu WeaveCircularTLVBuffer::GetNextBuffer

Details
Parameter
[in,out] ioReader
TLVReader zum Aufrufen dieser Funktion
[in,out] inBufHandle
Einen Handle für das CircularTLVWriter-Objekt
[in,out] outBufStart
Der Verweis auf den Datenpuffer. Bei der Rückgabe wird er auf einen Wert innerhalb dieses Zwischenspeichers gesetzt.
[out] outBufLen
Legen Sie diesen Wert bei der Rückgabe auf die Anzahl der kontinuierlichen Byte fest, die aus dem Zwischenspeicher gelesen werden konnten.
Rückgabewerte
WEAVE_NO_ERROR
Es ist bedingungslos erfolgreich.