Pixie
Loading...
Searching...
No Matches
pixie::ImmerPermutableSequence< T, HeapPolicy > Class Template Reference

Move-only, by-value adapter for immer::flex_vector<T>. More...

#include <immer_sequence.h>

Inheritance diagram for pixie::ImmerPermutableSequence< T, HeapPolicy >:
pixie::PermutableSequenceBase< ImmerPermutableSequence< std::uint64_t, immer::default_heap_policy >, std::uint64_t, std::uint64_t >

Classes

struct  MemoryUsage
 Requested live tree bytes, excluding heap free lists and RSS. More...
 

Public Member Functions

 ImmerPermutableSequence () noexcept=default
 Construct canonical empty without heap allocation.
 
 ImmerPermutableSequence (const ImmerPermutableSequence &)=delete
 Ownership is exclusive; copying is disabled.
 
ImmerPermutableSequence & operator= (const ImmerPermutableSequence &)=delete
 Ownership is exclusive; copying is disabled.
 
 ImmerPermutableSequence (ImmerPermutableSequence &&other) noexcept
 Transfer ownership, leaving other canonical empty.
 
ImmerPermutableSequence & operator= (ImmerPermutableSequence &&other) noexcept
 Transfer ownership; self-move is a no-op, other becomes empty.
 
MemoryUsage memory_usage () const noexcept
 Account for live storage in linear time, without allocations.
 
- Public Member Functions inherited from pixie::PermutableSequenceBase< ImmerPermutableSequence< std::uint64_t, immer::default_heap_policy >, std::uint64_t, std::uint64_t >
size_type size () const noexcept
 Return the logical element count.
 
bool empty () const noexcept
 Test emptiness.
 
const_reference operator[] (size_type position) const
 Read a checked zero-based element without exposing mutation.
 
void insert_at (size_type position, std::uint64_t value)
 Insert one value at a zero-based position.
 
void rotate_left (size_type left, size_type right, size_type distance)
 Rotate [left,right) left while preserving outside values.
 
void merge (ImmerPermutableSequence< std::uint64_t, immer::default_heap_policy > &donor)
 Append unchanged donor values and consume donor ownership.
 
size_type memory_usage_bytes () const noexcept
 Explicitly account for requested live storage.
 

Static Public Attributes

static constexpr std::size_t fanout = std::size_t{1} << Vector::bits
 Maximum number of child pointers per internal node.
 
static constexpr std::size_t leaf_capacity
 Maximum number of values per leaf.
 

Additional Inherited Members

- Public Types inherited from pixie::PermutableSequenceBase< ImmerPermutableSequence< std::uint64_t, immer::default_heap_policy >, std::uint64_t, std::uint64_t >
using value_type
 Stored element type.
 
using const_reference
 Immutable result type.
 
using size_type
 Count and position type.
 
- Static Public Member Functions inherited from pixie::PermutableSequenceBase< ImmerPermutableSequence< std::uint64_t, immer::default_heap_policy >, std::uint64_t, std::uint64_t >
static ImmerPermutableSequence< std::uint64_t, immer::default_heap_policy > from_range (Range &&range)
 Consume a possibly single-pass input range into an owning sequence.
 

Detailed Description

template<std::copy_constructible T = std::uint64_t, class HeapPolicy = immer::default_heap_policy>
class pixie::ImmerPermutableSequence< T, HeapPolicy >

Move-only, by-value adapter for immer::flex_vector<T>.

Implements PermutableSequenceBase, including unchanged-value consuming merge. No snapshots or references escape the adapter. Mutations keep the original roots alive until success to preserve the facade's strong exception guarantees; temporary slices use Immer's consuming operations. Build with PIXIE_THIRD_PARTY_BACKENDS. This is not the stable-reference indirect storage policy and does not implement permutation rebasing.

Template Parameters
TCopy-constructible value type with at most max_align_t alignment. Reads and persistent updates may copy values. Move-only payloads and stable-reference reads are not supported.
HeapPolicyImmer heap policy; defaults to its standard pooled heap. Changing the heap does not change the reference-counting or value policy.

Member Function Documentation

◆ memory_usage()

template<std::copy_constructible T = std::uint64_t, class HeapPolicy = immer::default_heap_policy>
MemoryUsage pixie::ImmerPermutableSequence< T, HeapPolicy >::memory_usage ( ) const
inlinenoexcept

Account for live storage in linear time, without allocations.

Uses the pinned Immer node layout and its fixed-capacity reference-counted allocations. Excludes static empty nodes, allocator pools/bookkeeping, RSS and temporary persistent snapshots. Returned owners do not share payload subtrees with other adapter instances.

Returns
Disjoint allocation counts and bytes, including this facade once.

Member Data Documentation

◆ leaf_capacity

template<std::copy_constructible T = std::uint64_t, class HeapPolicy = immer::default_heap_policy>
std::size_t pixie::ImmerPermutableSequence< T, HeapPolicy >::leaf_capacity
staticconstexpr
Initial value:
= std::size_t{1}
<< Vector::bits_leaf

Maximum number of values per leaf.


The documentation for this class was generated from the following file: