C/C++ API Reference
Loading...
Searching...
No Matches
inline_var_len_entry_queue.h File Reference
#include "pw_containers/internal/var_len_entry_queue_iterator.h"
#include "pw_preprocessor/util.h"
#include <cstddef>
#include <cstdint>
#include "pw_bytes/span.h"
#include "pw_containers/internal/generic_var_len_entry_queue.h"
#include "pw_containers/internal/raw_storage.h"
#include "pw_span/span.h"
#include "pw_toolchain/constexpr_tag.h"

Go to the source code of this file.

Classes

class  pw::BasicInlineVarLenEntryQueue< T, kMaxSizeBytes >
 
class  pw::BasicInlineVarLenEntryQueue< T, containers::internal::kGenericSized >
 

Namespaces

namespace  pw
 The Pigweed namespace.
 

Macros

#define PW_VARIABLE_LENGTH_ENTRY_QUEUE_HEADER_SIZE_UINT32   (3)
 
#define _PW_VAR_QUEUE_SIZE_UINT32(max_size_bytes)
 
#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_CHECK_SIZE(max_size_bytes)
 
#define PW_VARIABLE_LENGTH_ENTRY_QUEUE_DECLARE(variable, max_size_bytes)
 

Typedefs

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.
 
typedef uint32_t * pw_InlineVarLenEntryQueue_Handle
 
typedef const uint32_t * pw_InlineVarLenEntryQueue_ConstHandle
 

Functions

void pw_InlineVarLenEntryQueue_Init (uint32_t array[], size_t array_size_uint32)
 
pw_InlineVarLenEntryQueue_Iterator pw_InlineVarLenEntryQueue_Begin (pw_InlineVarLenEntryQueue_Handle queue)
 
pw_InlineVarLenEntryQueue_ConstIterator pw_InlineVarLenEntryQueue_ConstBegin (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
pw_InlineVarLenEntryQueue_Iterator pw_InlineVarLenEntryQueue_End (pw_InlineVarLenEntryQueue_Handle queue)
 
pw_InlineVarLenEntryQueue_ConstIterator pw_InlineVarLenEntryQueue_ConstEnd (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
bool pw_InlineVarLenEntryQueue_Empty (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
uint32_t pw_InlineVarLenEntryQueue_Size (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
uint32_t pw_InlineVarLenEntryQueue_MaxSize (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
uint32_t pw_InlineVarLenEntryQueue_SizeBytes (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
uint32_t pw_InlineVarLenEntryQueue_MaxSizeBytes (pw_InlineVarLenEntryQueue_ConstHandle 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)
 
void pw_InlineVarLenEntryQueue_Clear (pw_InlineVarLenEntryQueue_Handle queue)
 
uint32_t pw_InlineVarLenEntryQueue_RawStorageSizeBytes (pw_InlineVarLenEntryQueue_ConstHandle queue)
 
void pw_InlineVarLenEntryQueue_CopyEntries (pw_InlineVarLenEntryQueue_ConstHandle from, pw_InlineVarLenEntryQueue_Handle to)
 
void pw_InlineVarLenEntryQueue_CopyEntriesOverwrite (pw_InlineVarLenEntryQueue_ConstHandle from, pw_InlineVarLenEntryQueue_Handle to)
 
void pw_InlineVarLenEntryQueue_MoveEntries (pw_InlineVarLenEntryQueue_Handle from, pw_InlineVarLenEntryQueue_Handle to)
 
void pw_InlineVarLenEntryQueue_MoveEntriesOverwrite (pw_InlineVarLenEntryQueue_Handle from, pw_InlineVarLenEntryQueue_Handle to)
 

Detailed Description

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.

  • Data and metadata are stored inline in a contiguous block of uint32_t-aligned memory.
  • The data structure is trivially copyable.
  • All state changes are accomplished with a single update to a 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:

  • A simple ring buffer of variable-length entries is needed. Advanced features like multiple readers and a user-defined preamble are not required.
  • A consistent, parsable, in-memory representation is required (e.g. to decode the buffer from a block of memory).
  • C support is required.

InlineVarLenEntryQueue provides complete C and C++ APIs. The InlineVarLenEntryQueue C++ class is structured similarly to pw::InlineQueue and pw::Vector.