Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью Cloud Translation API.
Switch to English

nl :: Плетение :: TLV :: ПлетениеКруглыйTLVБуфер

#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 (uint8_t *inBuffer, size_t inBufferLength, uint8_t *inHead)

Публичные типы

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)

Публичные типы

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
TLVReader, расположенный уудаляемого элемента.
Возвращаемые значения
WEAVE_NO_ERROR
Об успехе. Элемент будет выселен.
other
Произошла ошибка при обработке события. Элемент остается в буфере. Функция записи, вызвавшая вытеснение этого элемента, завершится ошибкой.

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

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
)

Удаляет самый старый элемент 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 зрения 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
)

ПлетениеКруглоеTLVБуфер

 WeaveCircularTLVBuffer(
  uint8_t *inBuffer,
  size_t inBufferLength
)

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

Подробности
Параметры
[in] inBuffer
Указатель на резервное хранилище для очереди
[in] inBufferLength
Длина резервного хранилища в байтах

ПлетениеКруглоеTLVBuffer

 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
[in] inBufStart
указатель на начало данных (с TLVWriter зрения 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
[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
[in,out] outBufStart
Ссылка на буфер данных. При возврате устанавливается значение в этом буфере.
[out] outBufLen
По возвращении установите количество непрерывных байтов, которые могут быть прочитаны из буфера.
Возвращаемые значения
WEAVE_NO_ERROR
Успех безоговорочно.