#include <cstddef>
#include <cstdint>
#include "pw_toolchain/constexpr_tag.h"
#include "pw_preprocessor/compiler.h"
#include "pw_preprocessor/util.h"
#include "pw_varint/varint.h"
#include <limits>
#include <type_traits>
#include <utility>
#include "pw_containers/internal/raw_storage.h"
#include "pw_span/span.h"
Go to the source code of this file.
Classes | |
struct | pw_InlineVarLenEntryQueue_ConstIterator |
struct | pw_InlineVarLenEntryQueue_Iterator |
struct | pw_InlineVarLenEntryQueue_Entry |
struct | pw_InlineVarLenEntryQueue_ConstEntry |
Const version of pw_InlineVarLenEntryQueue_Entry . More... | |
class | pw::BasicInlineVarLenEntryQueue< T, kMaxSizeBytes > |
class | pw::BasicInlineVarLenEntryQueue< T, containers::internal::kGenericSized > |
class | pw::containers::internal::VarLenEntryQueueEntryIterator< T > |
class | pw::containers::internal::VarLenEntryQueueEntry< T > |
Refers to an entry in-place in the queue. Entries may be discontiguous. More... | |
class | pw::BasicInlineVarLenEntryQueue< T, kMaxSizeBytes >::const_iterator |
class | pw::BasicInlineVarLenEntryQueue< T, kMaxSizeBytes >::iterator |
Namespaces | |
namespace | pw |
The Pigweed namespace. | |
Macros | |
#define | PW_VARIABLE_LENGTH_ENTRY_QUEUE_DECLARE(variable, max_size_bytes) |
#define | PW_VARIABLE_LENGTH_ENTRY_QUEUE_HEADER_SIZE_UINT32 (3) |
#define | _PW_VAR_QUEUE_DATA_SIZE_UINT32(max_size_bytes) ((_PW_VAR_QUEUE_DATA_SIZE_BYTES(max_size_bytes) + 3 /* round up */) / 4) |
#define | _PW_VAR_QUEUE_DATA_SIZE_BYTES(max_size_bytes) |
#define | _PW_VAR_QUEUE_ARRAY_SIZE_BYTES queue[0] |
#define | _PW_VAR_QUEUE_HEAD queue[1] |
#define | _PW_VAR_QUEUE_TAIL queue[2] |
#define | _PW_VAR_QUEUE_DATA ((const uint8_t*)&queue[3]) |
Typedefs | |
typedef uint32_t * | pw_InlineVarLenEntryQueue_Handle |
typedef const uint32_t * | pw_InlineVarLenEntryQueue_ConstHandle |
template<size_t kMaxSizeBytes = containers::internal::kGenericSized> | |
using | pw::InlineVarLenEntryQueue = BasicInlineVarLenEntryQueue< std::byte, kMaxSizeBytes > |
Variable-length entry queue that uses std::byte for the byte type. | |
Functions | |
static void | pw_InlineVarLenEntryQueue_Init (uint32_t array[], size_t array_size_uint32) |
static void | pw_InlineVarLenEntryQueue_Clear (pw_InlineVarLenEntryQueue_Handle queue) |
Empties the queue. | |
void | pw_InlineVarLenEntryQueue_Push (pw_InlineVarLenEntryQueue_Handle queue, const void *data, uint32_t data_size_bytes) |
bool | pw_InlineVarLenEntryQueue_TryPush (pw_InlineVarLenEntryQueue_Handle queue, const void *data, const uint32_t data_size_bytes) |
void | pw_InlineVarLenEntryQueue_PushOverwrite (pw_InlineVarLenEntryQueue_Handle queue, const void *data, uint32_t data_size_bytes) |
void | pw_InlineVarLenEntryQueue_Pop (pw_InlineVarLenEntryQueue_Handle queue) |
static pw_InlineVarLenEntryQueue_Iterator | pw_InlineVarLenEntryQueue_Begin (pw_InlineVarLenEntryQueue_Handle queue) |
Returns an iterator to the start of the InlineVarLenEntryQueue . | |
static pw_InlineVarLenEntryQueue_Iterator | pw_InlineVarLenEntryQueue_End (pw_InlineVarLenEntryQueue_Handle queue) |
Returns an iterator that points past the end of the queue. | |
static pw_InlineVarLenEntryQueue_ConstIterator | pw_InlineVarLenEntryQueue_ConstEnd (pw_InlineVarLenEntryQueue_ConstHandle queue) |
Returns an iterator that points past the end of the queue. | |
static void | pw_InlineVarLenEntryQueue_Iterator_Advance (pw_InlineVarLenEntryQueue_Iterator *iterator) |
void | pw_InlineVarLenEntryQueue_ConstIterator_Advance (pw_InlineVarLenEntryQueue_ConstIterator *iterator) |
Advances a const iterator. | |
static bool | pw_InlineVarLenEntryQueue_Iterator_Equal (const pw_InlineVarLenEntryQueue_Iterator *lhs, const pw_InlineVarLenEntryQueue_Iterator *rhs) |
Compares two iterators for equality. | |
static bool | pw_InlineVarLenEntryQueue_ConstIterator_Equal (const pw_InlineVarLenEntryQueue_ConstIterator *lhs, const pw_InlineVarLenEntryQueue_ConstIterator *rhs) |
Compares two const iterators for equality. | |
static pw_InlineVarLenEntryQueue_Entry | pw_InlineVarLenEntryQueue_GetEntry (const pw_InlineVarLenEntryQueue_Iterator *iterator) |
Dereferences an iterator, loading the entry it points to. | |
pw_InlineVarLenEntryQueue_ConstEntry | pw_InlineVarLenEntryQueue_GetConstEntry (const pw_InlineVarLenEntryQueue_ConstIterator *iterator) |
Dereferences a const iterator, loading the entry it points to. | |
uint32_t | pw_InlineVarLenEntryQueue_ConstEntry_Copy (const pw_InlineVarLenEntryQueue_ConstEntry *entry, void *dest, uint32_t count) |
PW_MODIFY_DIAGNOSTICS_PUSH () | |
static uint32_t | pw_InlineVarLenEntryQueue_Entry_Copy (const pw_InlineVarLenEntryQueue_Entry *entry, void *dest, uint32_t count) |
Copies the contents of a mutable entry. | |
static uint8_t | pw_InlineVarLenEntryQueue_Entry_At (const pw_InlineVarLenEntryQueue_Entry *entry, size_t index) |
static uint8_t | pw_InlineVarLenEntryQueue_ConstEntry_At (const pw_InlineVarLenEntryQueue_ConstEntry *entry, size_t index) |
uint32_t | pw_InlineVarLenEntryQueue_Size (pw_InlineVarLenEntryQueue_ConstHandle queue) |
static uint32_t | pw_InlineVarLenEntryQueue_MaxSize (pw_InlineVarLenEntryQueue_ConstHandle queue) |
uint32_t | pw_InlineVarLenEntryQueue_SizeBytes (pw_InlineVarLenEntryQueue_ConstHandle queue) |
static uint32_t | pw_InlineVarLenEntryQueue_MaxSizeBytes (pw_InlineVarLenEntryQueue_ConstHandle queue) |
static uint32_t | pw_InlineVarLenEntryQueue_RawStorageSizeBytes (pw_InlineVarLenEntryQueue_ConstHandle queue) |
static bool | pw_InlineVarLenEntryQueue_Empty (pw_InlineVarLenEntryQueue_ConstHandle queue) |
static pw_InlineVarLenEntryQueue_ConstIterator | pw_InlineVarLenEntryQueue_ConstBegin (pw_InlineVarLenEntryQueue_ConstHandle queue) |
static const uint8_t * | _pw_InlineVarLenEntryQueue_ConstEntry_GetPointer (const pw_InlineVarLenEntryQueue_ConstEntry *entry, size_t index) |
const uint8_t * | _pw_InlineVarLenEntryQueue_ConstEntry_GetPointerChecked (const pw_InlineVarLenEntryQueue_ConstEntry *entry, size_t index) |
PW_MODIFY_DIAGNOSTICS_POP () | |
A InlineVarLenEntryQueue
is a queue of inline variable-length binary entries. It is implemented as a ring (circular) buffer and supports operations to append entries and overwrite if necessary. Entries may be zero bytes up to the maximum size supported by the queue.
The InlineVarLenEntryQueue
has a few interesting properties.
uint32_t
-aligned memory.uint32_t
. The memory is always in a valid state and may be parsed offline.This data structure is a much simpler version of
embed:rst:inline :cpp:class:`pw::ring_buffer::PrefixedEntryRingBuffer`
. Prefer this sized-entry ring buffer to PrefixedEntryRingBuffer
when:
InlineVarLenEntryQueue
is implemented in C and provides complete C and C++ APIs. The InlineVarLenEntryQueue
C++ class is structured similarly to pw::InlineQueue
and pw::Vector
.