ZXFoundation™ 26h2
Loading...
Searching...
No Matches
structure.cxxm File Reference

C++26 memory-mapped structure framework built on the unified field. More...

import zxfoundation.sys.syschk.barebones;
import lib.error;
import lib.pack_indexing;
import lib.cstring;
import zxfoundation.base.types;
import lib.rwonce;
import lib.stl;
import lib.fixed_string;
import lib.bitfield;
Include dependency graph for structure.cxxm:

Data Structures

struct  lib::detail::all_byte_spans< T >
struct  lib::detail::all_byte_spans< std::tuple< Ss... > >
struct  lib::detail::all_slices< T >
struct  lib::detail::all_slices< std::tuple< Ss... > >
class  lib::array_proxy< ElementType, Count, IsConst, IsMMIO, StructEndian >
struct  lib::detail::bank_count_of< Loc >
struct  lib::detail::bank_count_of< bank< Count, Stride > >
class  lib::bank_proxy< ElementType, Count, Stride, IsConst, IsMMIO, StructEndian >
struct  lib::detail::bank_stride_of< Loc >
struct  lib::detail::bank_stride_of< bank< Count, Stride > >
struct  lib::detail::computed_layout_meta< N >
struct  lib::detail::fold_max_end_byte< Tuple >
struct  lib::detail::fold_max_end_byte< std::tuple< Sls... > >
struct  lib::detail::fold_min_byte_offset< Tuple >
struct  lib::detail::fold_min_byte_offset< std::tuple< Sls... > >
struct  lib::detail::fold_min_span_byte< Tuple >
struct  lib::detail::fold_min_span_byte< std::tuple< Sps... > >
struct  lib::detail::fold_slice_width< Tuple >
struct  lib::detail::fold_slice_width< std::tuple< Sls... > >
struct  lib::detail::fold_span_size_sum< Tuple >
struct  lib::detail::fold_span_size_sum< std::tuple< Sps... > >
struct  lib::detail::is_auto_tag< T >
struct  lib::detail::is_auto_tag< auto_layout >
struct  lib::detail::is_bank_tag< T >
struct  lib::detail::is_bank_tag< bank< C, S > >
struct  lib::detail::is_bitfield_trait< T >
struct  lib::detail::is_bitfield_trait< bit_field< T, Num > >
struct  lib::detail::is_byte_span< T >
struct  lib::detail::is_byte_span< byte_span< S, E > >
struct  lib::detail::is_slice< T >
struct  lib::detail::is_slice< slice< O, A, B, N > >
struct  lib::structure_layout_info< Extent, Alignment, StructEndian, FieldOrExts >::layout_holder< std::tuple< Fs... > >
struct  lib::detail::loc_slices< L >
struct  lib::detail::loc_slices< slice< O, A, B, N > >
struct  lib::detail::loc_slices< std::tuple< Ss... > >
struct  lib::detail::loc_spans< L >
struct  lib::detail::loc_spans< std::tuple< Ss... > >
struct  lib::detail::map_structure_fields< std::tuple< Fs... > >
class  lib::mmio_structure_ref< Extent, Alignment, StructEndian, FieldOrExts >
struct  lib::detail::span_size_of< Loc >
struct  lib::detail::span_size_of< byte_span< S, E > >
class  lib::structure< Extent, Alignment, StructEndian, FieldOrExts >
struct  lib::structure_field_view< Field >
 Structure-domain resolution of a unified field. More...
class  lib::structure_impl< Extent, Alignment, StructEndian, IsMMIO, FieldOrExts >
struct  lib::structure_layout_info< Extent, Alignment, StructEndian, FieldOrExts >
class  lib::structure_ref< Extent, Alignment, StructEndian, FieldOrExts >
class  lib::structure_span< StructT, IsMMIO >
 Zero-overhead span of structures over contiguous memory. More...
struct  lib::structure_traits< structure< Extent, Alignment, StructEndian, FieldOrExts... > >
struct  std::tuple_element< I, lib::structure< Extent, Alignment, StructEndian, FieldOrExts... > >
struct  std::tuple_size< lib::structure< Extent, Alignment, StructEndian, FieldOrExts... > >

Concepts

concept  lib::detail::is_record_like
concept  lib::detail::is_structure_like

Typedefs

template<fixed_string Name, class ElementType, usize Count, usize Stride = sizeof(ElementType)>
using lib::bank_array = field<Name, bank<Count, Stride>, ElementType, attr::rw>
template<fixed_string Name, usize Alignment, class... Slices>
using lib::cross_aligned_rw_field = field<Name, std::tuple<Slices...>, u64, attr::rw, attr::aligned<Alignment> >
template<fixed_string Name, class Type, class... Slices>
using lib::cross_ro_field = field<Name, std::tuple<Slices...>, Type, attr::ro>
template<fixed_string Name, class Type, class... Slices>
using lib::cross_rw_field = field<Name, std::tuple<Slices...>, Type, attr::rw>
template<usize ByteOffset, usize StartBit, usize EndBit, class Numbering = msb0_t>
using lib::cross_slice = lib::slice<ByteOffset, StartBit, EndBit, Numbering>
template<fixed_string Name, class Type, class... Spans>
using lib::disjoint_ro_byte = field<Name, std::tuple<Spans...>, Type, attr::ro>
template<fixed_string Name, class Type, class... Spans>
using lib::disjoint_rw_byte = field<Name, std::tuple<Spans...>, Type, attr::rw>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::overlay_ro_byte = field<Name, byte_span<Start, End>, Type, attr::ro, attr::overlay>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::overlay_rw_byte = field<Name, byte_span<Start, End>, Type, attr::rw, attr::overlay>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::rao_byte = field<Name, byte_span<Start, End>, Type, attr::rao>
template<fixed_string Name, class Type>
using lib::rao_byte_auto = field<Name, auto_layout, Type, attr::rao>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::raz_byte = field<Name, byte_span<Start, End>, Type, attr::raz>
template<fixed_string Name, class Type>
using lib::raz_byte_auto = field<Name, auto_layout, Type, attr::raz>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::rc_byte = field<Name, byte_span<Start, End>, Type, attr::rc>
template<fixed_string Name, class Type>
using lib::rc_byte_auto = field<Name, auto_layout, Type, attr::rc>
template<fixed_string Name, class ElementType, usize Count, usize Stride = sizeof(ElementType)>
using lib::ro_bank_array = field<Name, bank<Count, Stride>, ElementType, attr::ro>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::ro_byte = field<Name, byte_span<Start, End>, Type, attr::ro>
template<fixed_string Name, class Type>
using lib::ro_byte_auto = field<Name, auto_layout, Type, attr::ro>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::rw_byte = field<Name, byte_span<Start, End>, Type, attr::rw>
template<fixed_string Name, class Type>
using lib::rw_byte_auto = field<Name, auto_layout, Type, attr::rw>
template<fixed_string Name, usize Start, usize End, class Type = u8>
using lib::rz_byte = field<Name, byte_span<Start, End>, Type, attr::rz>
template<fixed_string Name, class Type = u8>
using lib::rz_byte_auto = field<Name, auto_layout, Type, attr::rz>
template<class StructT>
using lib::structure_as_mmio_ref_t = typename structure_traits<StructT>::mmio_ref_type
template<class StructT>
using lib::structure_as_ref_t = typename structure_traits<StructT>::ref_type
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_ro_byte = field<Name, byte_span<Start, End>, Type, attr::ro, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_rw_byte = field<Name, byte_span<Start, End>, Type, attr::rw, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_w0c_byte = field<Name, byte_span<Start, End>, Type, attr::w0c, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_w1c_byte = field<Name, byte_span<Start, End>, Type, attr::w1c, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_w1s_byte = field<Name, byte_span<Start, End>, Type, attr::w1s, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_w1t_byte = field<Name, byte_span<Start, End>, Type, attr::w1t, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::unaligned_wo_byte = field<Name, byte_span<Start, End>, Type, attr::wo, attr::unaligned>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::w0c_byte = field<Name, byte_span<Start, End>, Type, attr::w0c>
template<fixed_string Name, class Type>
using lib::w0c_byte_auto = field<Name, auto_layout, Type, attr::w0c>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::w1c_byte = field<Name, byte_span<Start, End>, Type, attr::w1c>
template<fixed_string Name, class Type>
using lib::w1c_byte_auto = field<Name, auto_layout, Type, attr::w1c>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::w1s_byte = field<Name, byte_span<Start, End>, Type, attr::w1s>
template<fixed_string Name, class Type>
using lib::w1s_byte_auto = field<Name, auto_layout, Type, attr::w1s>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::w1t_byte = field<Name, byte_span<Start, End>, Type, attr::w1t>
template<fixed_string Name, class Type>
using lib::w1t_byte_auto = field<Name, auto_layout, Type, attr::w1t>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::wac_byte = field<Name, byte_span<Start, End>, Type, attr::wac>
template<fixed_string Name, class Type>
using lib::wac_byte_auto = field<Name, auto_layout, Type, attr::wac>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::wo_byte = field<Name, byte_span<Start, End>, Type, attr::wo>
template<fixed_string Name, class Type>
using lib::wo_byte_auto = field<Name, auto_layout, Type, attr::wo>
template<fixed_string Name, usize Start, usize End, class Type>
using lib::woo_byte = field<Name, byte_span<Start, End>, Type, attr::woo>
template<fixed_string Name, class Type>
using lib::woo_byte_auto = field<Name, auto_layout, Type, attr::woo>

Functions

template<class ValT, class FieldEndian, class StructEndian>
constexpr auto lib::detail::adjust_endian_on_read (ValT val) noexcept -> ValT
template<class ValT, class FieldEndian, class StructEndian>
constexpr auto lib::detail::adjust_endian_on_write (ValT val) noexcept -> ValT
template<usize Extent, usize Alignment, class... Fields>
consteval auto lib::detail::calculate_structure_layout ()
template<class Loc, class Slices, class Spans, bool IsCross, bool IsDisjoint, bool IsByte>
consteval auto lib::detail::resolve_start () noexcept -> usize
template<class Loc, class Slices, class Spans, class ElementType, bool IsCross, bool IsDisjoint, bool IsByte, bool IsBank>
consteval auto lib::detail::resolve_total_size () noexcept -> usize
template<class Slices, bool IsCross>
consteval auto lib::detail::resolve_total_width () noexcept -> usize

Variables

template<class T>
constexpr bool lib::detail::is_bitfield_v = is_bitfield_trait<std::remove_cvref_t<T> >::value
template<class T>
constexpr bool lib::detail::is_record_v = is_record_like<T>
template<class T>
constexpr bool lib::detail::is_structure_v = is_structure_like<T>

Detailed Description

C++26 memory-mapped structure framework built on the unified field.

SPDX-License-Identifier: Apache-2.0