REAL
Regular Expression Algorithmic Library — constexpr C++20 regex
Loading...
Searching...
No Matches
storage.hpp File Reference

Storage policies: where a program lives and how scratch is allocated. More...

#include "real/version.hpp"
#include <array>
#include <cassert>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <memory>
#include <stdexcept>
#include <string>
#include <string_view>
#include <type_traits>
#include <vector>
#include "real/frontend/ast.hpp"
#include "real/frontend/compiler.hpp"
#include "real/engine/pike.hpp"
#include "real/core/program.hpp"
Include dependency graph for storage.hpp:

Classes

struct  real::fixed_string< N >
 A fixed-size string usable as a non-type template parameter. More...
 
class  real::detail::static_vec< T, Cap >
 Fixed-capacity vector backed by an inline array (no heap). More...
 
class  real::detail::small_vec< T, InlineCapacity >
 Small-buffer-optimized vector for the dynamic hot paths. More...
 
struct  real::detail::small_vec< T, InlineCapacity >::inline_block
 Inline element block. A struct (not a bare C array) so the union ctor can activate it as a whole with construct_at in a constant expression, while inline_data still indexes a plain C array — which the static analyzer can bound (a std::array's operator[] hides the extent and trips a false out-of-bounds on transfer_range). More...
 
union  real::detail::small_vec< T, InlineCapacity >::Storage
 The either-or storage: the inline buffer, or a pointer to the heap block once the vector has spilled. is_heap_ says which member is active. More...
 
struct  real::detail::owned_name_context
 The name-resolution context a result owns when it must outlive the regex it came from. More...
 
class  real::detail::name_context_box
 A uniquely-owning, deep-copying box for owned_name_context that survives constant evaluation. More...
 
struct  real::detail::borrowed_names
 The compile-time policy's name owner: there is nothing to own. More...
 
struct  real::detail::dynamic_storage
 Storage policy backing real::regex: heap, sized once at run time. More...
 
struct  real::detail::dynamic_storage::state_type
 VM scratch state: SBO thread lists, working slots and eps stack. More...
 
struct  real::detail::static_il_guard_fields
 IL: the per-haystack guard fields the inner-literal route needs, for a compile-time storage. More...
 
struct  real::detail::static_no_il_guard_fields
 No IL fields: the route is not compiled for this pattern. More...
 
struct  real::detail::static_pike_scratch< CodeSize, SlotCount, WantsIL >
 Compile-time-storage VM scratch, all fixed-capacity (zero heap), keyed on DIMENSIONS ONLY. More...
 
struct  real::detail::static_storage< Pat, F >
 Storage policy backing real::static_regex: compile-time, stateless. More...
 
struct  real::detail::static_storage< Pat, F >::measured
 Everything build yields that is NOT a range, measured in ONE evaluation. More...
 

Namespaces

namespace  real
 REAL's public API: real::regex, real::static_regex, real::flags and the match/iterator types built on them.
 
namespace  real::detail
 DFA construction internals: subset construction over a flattened NFA. Not a stable API.
 

Functions

constexpr std::size_t real::detail::scratch_code_tier (std::size_t code_size)
 Rounds a program length up to the scratch capacity tier it shares with its neighbours.
 

Detailed Description

Storage policies: where a program lives and how scratch is allocated.

Exact sizing uses C++20 transient constexpr allocation: the program is built once to measure each array, then rebuilt to fill it.