нл:: Переплетение:: ТЛВ:: 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)
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, расположенный на элементе, который будет удален, а также контекст void *, в котором пользователь мог предоставить дополнительную среду для обратного вызова. Если функция успешно обработала элемент, она должна вернуть WEAVE_NO_ERROR ; это означает для WeaveCircularTLVBuffer , что элемент можно безопасно выселить. Любое другое возвращаемое значение рассматривается как ошибка и не позволяет WeaveCircularTLVBuffer удалить рассматриваемый элемент.

Примечание. Этот обратный вызов можно использовать, чтобы заставить WeaveCircularTLVBuffer не исключать элемент. Это может быть полезно в ряде случаев, когда желательно иметь базовый циклический буфер, но не переопределять какие-либо элементы внутри него.

Подробности
Параметры
[in] inBuffer
Ссылка на буфер, из которого происходит выселение
[in] inAppData
Указатель на предоставленную пользователем структуру, содержащую дополнительный контекст для этого обратного вызова.
[in] inReader
TTLVReader , расположенный у удаляемого элемента.
Возвращаемые значения
WEAVE_NO_ERROR
Об успехе. Элемент будет выселен.
other
Во время обработки события произошла ошибка. Элемент остается в буфере. Функция записи, вызвавшая удаление этого элемента, завершится сбоем.

Публичные атрибуты

mAppData

void * mAppData

Необязательный, предоставляемый пользователем контекст, который будет использоваться с обратным вызовом, обрабатывающим вытесненный элемент.

mImplicitProfileId

uint32_t mImplicitProfileId

mProcessEvictedElement

ProcessEvictedElementFunct mProcessEvictedElement

Необязательный обратный вызов, предоставляемый пользователем, который обрабатывает элемент перед его удалением из кольцевого буфера.

Дополнительную информацию о реализации функции mProcessEvictedElement см. в определении типа ProcessEvictedElementFunct.

Общественные функции

Доступная длина данных

size_t AvailableDataLength(
  void
) const 

Длина данных

size_t DataLength(
  void
) const 

Эвиктхед

WEAVE_ERROR EvictHead(
  void
)

Удаляет самый старый элемент TLV верхнего уровня в WeaveCircularTLVBuffer .

Эта функция удаляет самый старый элемент TLV верхнего уровня в буфере. Функция вызовет обратный вызов, зарегистрированный в mProcessEvictedElement, для обработки элемента перед удалением. Если обратный вызов возвращает что-либо, кроме WEAVE_NO_ERROR , элемент не удаляется. Аналогично, если возникает какая-либо другая ошибка, в буфере отсутствуют элементы и т. д., базовый WeaveCircularTLVBuffer остается неизменным.

Подробности
Возвращаемые значения
WEAVE_NO_ERROR
Об успехе.
other
При любой другой ошибке, возвращаемой обратным вызовом или TLVReader .

Финализироватьбуфер

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 

ОчередьHead

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
Указатель на резервное хранилище для очереди.
[in] inBufferLength
Длина резервного хранилища в байтах

WeaveCircularTLVBuffer

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

Конструктор WeaveCircularTLVBuffer .

Подробности
Параметры
[in] inBuffer
Указатель на резервное хранилище для очереди.
[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
Успех безоговорочно.