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

C++26 unified field descriptor. More...

Include dependency graph for bitfield.cxxm:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  lib::addr< Offset >
 Byte-offset anchor for hierarchical register addressing. More...
struct  lib::attr::aligned< A >
 address = raw << log2(A) More...
struct  lib::aligned_address< Alignment >
 Value transformer contract (carries caller bit width). More...
struct  lib::detail::as_transform< H, bool >
struct  lib::detail::as_transform< H, true >
struct  lib::auto_layout
 Automatic-layout locator (structure domain). More...
struct  lib::bank< Count, Stride >
 Strided-array locator (structure domain). More...
struct  lib::endian::big
class  lib::bit_field< T, Numbering >
class  lib::bit_ref< T >
struct  lib::bit_slice< Start, End >
 Compile-time bit slice descriptor (record domain). More...
class  lib::bitfield_ref< T, Numbering >
class  lib::byte_bit_ref< Numbering, TotalBits >
struct  lib::byte_span< Start, End >
 Byte-range locator (structure domain, whole bytes). More...
struct  lib::attr::endian_big
struct  lib::attr::endian_little
struct  lib::exact_uint< Bits >
 Exact-width unsigned integer type (compile-time bit width 1..128). More...
struct  lib::extensions< Mixins >
struct  lib::field< Name, Locator, Type, Attr >
 Unified field descriptor. More...
struct  lib::detail::filter_extensions< Ts >
struct  lib::detail::filter_extensions_dispatch< HasExt, Ts >
struct  lib::detail::filter_extensions_dispatch< true, Ts... >
struct  lib::detail::filter_fields< Ts >
struct  lib::detail::filter_fields_dispatch< AllFields, Ts >
struct  lib::detail::filter_fields_dispatch< false, Ts... >
struct  lib::detail::filter_fields_impl< Acc, Head, Tail... >
struct  lib::detail::filter_fields_impl< std::tuple< Collected... > >
struct  lib::detail::filter_fields_step< false, std::tuple< Collected... >, Head, Tail... >
struct  lib::detail::filter_fields_step< true, std::tuple< Collected... >, Head, Tail... >
struct  lib::detail::find_extensions< Ts >
struct  lib::detail::find_extensions< Head, Tail... >
struct  lib::detail::first_of< Pred, Ts >
struct  lib::detail::first_of< Pred, H, T... >
struct  lib::attr::fixed< V >
 architectural constant (always V) More...
struct  lib::detail::fold_max_bit< Tuple >
struct  lib::detail::fold_max_bit< std::tuple< Ss... > >
struct  lib::detail::fold_min_bit< Tuple >
struct  lib::detail::fold_min_bit< std::tuple< Ss... > >
struct  lib::detail::fold_total_width< Tuple >
struct  lib::detail::fold_total_width< std::tuple< Ss... > >
struct  lib::attr::init< V >
 default/reset value More...
struct  lib::attr::inverted
 active-low More...
struct  lib::inverted
struct  lib::is_byte_array< T >
struct  lib::is_byte_array< std::array< u8, N > >
struct  lib::is_exact_uint< T >
struct  lib::is_exact_uint< exact_uint< Bits > >
struct  lib::detail::is_extensions_pack< T >
struct  lib::detail::is_extensions_pack< extensions< Ms... > >
struct  lib::detail::is_fixed_tag< T >
struct  lib::detail::is_fixed_tag< attr::fixed< V > >
struct  lib::detail::is_init_tag< T >
struct  lib::detail::is_init_tag< attr::init< V > >
struct  lib::detail::is_transform_tag< T >
struct  lib::detail::is_transform_tag< attr::aligned< A > >
struct  lib::detail::is_transform_tag< attr::inverted >
struct  lib::detail::is_transform_tag< attr::shifted_by< S > >
struct  lib::detail::is_word_tag< T >
struct  lib::detail::is_word_tag< attr::word< W > >
struct  lib::endian::little
struct  lib::lsb0_t
 LSB0 bit numbering policy (Bit 0 = Least Significant Bit). More...
struct  lib::detail::map_record_fields< std::tuple< Fs... > >
struct  lib::detail::mixin_invoker< extensions< Ms... >, Derived >
struct  lib::detail::mixin_invoker< std::tuple<>, Derived >
class  lib::mmio_record_ref< T, Numbering, FieldOrExts >
struct  lib::msb0_t
 MSB0 bit numbering policy (Bit 0 = Most Significant Bit). More...
struct  lib::endian::native
struct  lib::detail::none_token
struct  lib::attr::overlay
 intentional alias More...
struct  lib::detail::path_split< FullPath >
struct  lib::attr::rao
 Read-As-One. More...
struct  lib::detail::raw_tag_bits< Tag >
struct  lib::detail::raw_tag_bits< attr::fixed< V > >
struct  lib::detail::raw_tag_bits< attr::init< V > >
struct  lib::attr::raz
 Read-As-Zero. More...
struct  lib::attr::rc
 Read-to-Clear. More...
class  lib::record< T, Numbering, FieldOrExts >
struct  lib::detail::record_field_view< Field >
struct  lib::detail::record_layout_info< std::tuple< Fs... > >
class  lib::record_ref< T, Numbering, FieldOrExts >
struct  lib::detail::record_slices< L >
struct  lib::detail::record_slices< bit_slice< A, B > >
struct  lib::detail::record_slices< std::tuple< Ss... > >
struct  lib::record_traits< mmio_record_ref< T, Numbering, Fs... > >
struct  lib::record_traits< record< T, Numbering, Fs... > >
struct  lib::record_traits< record_ref< T, Numbering, Fs... > >
struct  lib::detail::resolve_field_type_impl< Field, Storage >
struct  lib::attr::ro
 Read-Only. More...
struct  lib::attr::rw
 Read-Write. More...
struct  lib::attr::rz
 Reserved-Zero. More...
struct  lib::detail::select_access< Attrs >
struct  lib::detail::select_access< H, T... >
struct  lib::detail::select_endian< Attrs >
struct  lib::detail::select_endian< H, T... >
struct  lib::detail::select_fixed_tag< Attrs >
struct  lib::detail::select_fixed_tag< H, T... >
struct  lib::detail::select_init_tag< Attrs >
struct  lib::detail::select_init_tag< H, T... >
struct  lib::detail::select_transform<... >
struct  lib::detail::select_transform< H, T... >
struct  lib::detail::select_word< Attrs >
struct  lib::detail::select_word< H, T... >
struct  lib::shifted< Shift >
struct  lib::attr::shifted_by< S >
 value = raw << S More...
struct  lib::slice< ByteOffset, StartBit, EndBit, Numbering >
 Bit-window locator within a byte-addressed unit (structure domain). More...
struct  lib::storage_traits< exact_uint< Bits > >
struct  lib::storage_traits< std::array< u8, N > >
struct  lib::storage_traits< T >
struct  lib::detail::transform_of< T >
struct  lib::detail::transform_of< attr::aligned< A > >
struct  lib::detail::transform_of< attr::inverted >
struct  lib::detail::transform_of< attr::shifted_by< S > >
struct  std::tuple_element< I, lib::record< T, Numbering, FieldOrExts... > >
struct  std::tuple_size< lib::record< T, Numbering, FieldOrExts... > >
struct  lib::attr::unaligned
struct  lib::attr::w0c
 Write-0-to-Clear. More...
struct  lib::attr::w1c
 Write-1-to-Clear. More...
struct  lib::attr::w1s
 Write-1-to-Set. More...
struct  lib::attr::w1t
 Write-1-to-Toggle. More...
struct  lib::attr::wac
 Write-Any-to-Clear. More...
struct  lib::attr::wo
 Write-Only. More...
struct  lib::attr::woo
 Write-Once-Only. More...
struct  lib::attr::word< W >
 bus granularity (u8/u16/u32/u64) More...
struct  lib::detail::word_type_of< T >
struct  lib::detail::word_type_of< attr::word< W > >

Namespaces

namespace  lib::access
 Backward-compatible access-tag namespace (aliases of attr).
namespace  lib::attr
 Field attribute tags (the closed modifier set for field).

Concepts

concept  lib::bit_storage
concept  lib::detail::record_value_type
 Duck-typed detection of a bitfield record value type.
concept  lib::detail::unsigned_word

Typedefs

using lib::bf128 = bit_field<std::array<u8, 16>, msb0_t>
using lib::bf128_ref = bitfield_ref<std::array<u8, 16>, msb0_t>
using lib::bf16 = bit_field<u16, msb0_t>
using lib::bf16_ref = bitfield_ref<u16, msb0_t>
using lib::bf32 = bit_field<u32, msb0_t>
using lib::bf32_ref = bitfield_ref<u32, msb0_t>
using lib::bf64 = bit_field<u64, msb0_t>
using lib::bf64_ref = bitfield_ref<u64, msb0_t>
using lib::bf8 = bit_field<u8, msb0_t>
using lib::bf8_ref = bitfield_ref<u8, msb0_t>
template<usize Start, usize End>
using lib::bit_span = bit_slice<Start, End>
using lib::lf128 = bit_field<std::array<u8, 16>, msb0_t>
using lib::lf128_ref = bitfield_ref<std::array<u8, 16>, lsb0_t>
using lib::lf16 = bit_field<u16, lsb0_t>
using lib::lf16_ref = bitfield_ref<u16, lsb0_t>
using lib::lf32 = bit_field<u32, lsb0_t>
using lib::lf32_ref = bitfield_ref<u32, lsb0_t>
using lib::lf64 = bit_field<u64, lsb0_t>
using lib::lf64_ref = bitfield_ref<u64, lsb0_t>
using lib::lf8 = bit_field<u8, lsb0_t>
using lib::lf8_ref = bitfield_ref<u8, lsb0_t>
template<usize Count>
using lib::detail::optimal_uint_t = decltype(smallest_uint_for_bits<Count>())
using lib::access::rao = attr::rao
using lib::access::raz = attr::raz
using lib::access::rc = attr::rc
template<class RecordT>
using lib::record_as_mmio_ref_t = typename record_traits<RecordT>::mmio_ref_type
template<class RecordT>
using lib::record_as_ref_t = typename record_traits<RecordT>::ref_type
template<class Field, class Storage>
using lib::detail::resolve_field_type = typename resolve_field_type_impl<Field, Storage>::type
using lib::access::ro = attr::ro
using lib::access::rw = attr::rw
using lib::access::rz = attr::rz
template<usize Bits>
using lib::uint_c = exact_uint<Bits>
using lib::access::w0c = attr::w0c
using lib::access::w1c = attr::w1c
using lib::access::w1s = attr::w1s
using lib::access::w1t = attr::w1t
using lib::access::wac = attr::wac
using lib::access::wo = attr::wo
using lib::access::woo = attr::woo
Absolute byte anchors.
template<usize N>
using lib::at_byte = addr<N>
template<usize N>
using lib::at_dword = addr<N * 8>
template<usize N>
using lib::at_halfword = addr<N * 2>
template<usize N>
using lib::at_qword = addr<N * 16>
template<usize N>
using lib::at_word = addr<N * 4>
Prefab field aliases (generic over locator; variadic extra attrs).
template<fixed_string N, class L, usize Aln, class... Extra>
using lib::aligned_ro = field<N, L, u64, attr::ro, attr::aligned<Aln>, Extra...>
template<fixed_string N, class L, usize Aln, class... Extra>
using lib::aligned_rw = field<N, L, u64, attr::rw, attr::aligned<Aln>, Extra...>
template<fixed_string N, class L, usize Aln, class... Extra>
using lib::aligned_wo = field<N, L, u64, attr::wo, attr::aligned<Aln>, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::overlay_ro = field<N, L, T, attr::ro, attr::overlay, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::overlay_rw = field<N, L, T, attr::rw, attr::overlay, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::overlay_wo = field<N, L, T, attr::wo, attr::overlay, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::rao = field<N, L, T, attr::rao, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::raz = field<N, L, T, attr::raz, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::rc = field<N, L, T, attr::rc, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::ro = field<N, L, T, attr::ro, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::rw = field<N, L, T, attr::rw, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::rz = field<N, L, T, attr::rz, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::w0c = field<N, L, T, attr::w0c, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::w1c = field<N, L, T, attr::w1c, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::w1s = field<N, L, T, attr::w1s, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::w1t = field<N, L, T, attr::w1t, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::wac = field<N, L, T, attr::wac, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::wo = field<N, L, T, attr::wo, Extra...>
template<fixed_string N, class L, class T = void, class... Extra>
using lib::woo = field<N, L, T, attr::woo, Extra...>
Locator shorthands.
template<usize A, usize B = A>
using lib::bits = bit_slice<A, B>
template<usize S, usize E>
using lib::bytes = byte_span<S, E>

Functions

template<class Field, class Numbering, class BitFieldT>
constexpr auto lib::detail::apply_default (BitFieldT &bits) noexcept -> void
template<class Field, class Numbering, class BitFieldT, class RawT>
constexpr auto lib::detail::commit_raw (BitFieldT &bits, RawT raw_val) noexcept -> void
 Commit a raw value into a record field's slices (no access policy).
template<unsigned_word OutT, class Numbering, usize TotalBits>
constexpr auto lib::detail::extract_slice_from_bytes (const u8 *data, usize a, usize b) noexcept -> OutT
template<class T>
consteval auto lib::detail::field_type_fits (usize width) noexcept -> bool
template<class Numbering, usize TotalBits>
constexpr auto lib::detail::get_bit_from_bytes (const u8 *data, usize bit_idx) noexcept -> bool
template<unsigned_word InT, class Numbering, usize TotalBits>
constexpr auto lib::detail::insert_slice_to_bytes (u8 *data, usize a, usize b, InT val) noexcept -> void
template<class Field, class Numbering, class BitFieldT>
constexpr auto lib::detail::read_field (BitFieldT &bits) noexcept
template<unsigned_word T>
constexpr auto lib::detail::safe_bitmask (usize count, usize total_bits) noexcept -> T
template<class Numbering, usize TotalBits>
constexpr auto lib::detail::set_bit_in_bytes (u8 *data, usize bit_idx, bool val) noexcept -> void
template<std::signed_integral TargetType, usize Width, unsigned_word InT>
constexpr auto lib::detail::sign_extend (InT val) noexcept -> TargetType
template<usize Count>
consteval auto lib::detail::smallest_uint_for_bits ()
template<auto V>
consteval auto lib::detail::to_raw_bits () noexcept -> u64
template<class... Fs>
consteval auto lib::detail::verify_field_overlaps () -> bool
template<class Field, class Numbering, class BitFieldT, class ValT>
constexpr auto lib::detail::write_field (BitFieldT &bits, ValT &&val) noexcept -> void

Variables

template<class T>
constexpr bool lib::detail::is_access_v
template<class T>
constexpr bool lib::detail::is_endian_v = is_one_of_v<T, attr::endian_big, attr::endian_little>
template<class T>
constexpr bool lib::is_exact_uint_v = is_exact_uint<std::remove_cvref_t<T> >::value
template<class T>
constexpr bool lib::detail::is_fixed_v = is_fixed_tag<T>::value
template<class T>
constexpr bool lib::detail::is_init_v = is_init_tag<T>::value
template<class T, class... Ts>
constexpr bool lib::detail::is_one_of_v = (std::is_same_v<T, Ts> || ...)
template<class T>
constexpr bool lib::detail::is_overlay_v = std::is_same_v<T, attr::overlay>
template<class T>
constexpr bool lib::detail::is_transform_v = is_transform_tag<T>::value
template<class T>
constexpr bool lib::detail::is_unaligned_v = std::is_same_v<T, attr::unaligned>
template<class T>
constexpr bool lib::detail::is_word_v = is_word_tag<T>::value
constexpr lsb0_t lib::lsb0 {}
constexpr msb0_t lib::msb0 {}

Detailed Description

C++26 unified field descriptor.

SPDX-License-Identifier: Apache-2.0

Variable Documentation

◆ is_access_v

template<class T>
bool lib::detail::is_access_v
inlineconstexprexport
Initial value:
= is_one_of_v<T,
Read-As-One.
Definition bitfield.cxxm:182
Read-As-Zero.
Definition bitfield.cxxm:180
Read-to-Clear.
Definition bitfield.cxxm:176
Read-Only.
Definition bitfield.cxxm:164
Read-Write.
Definition bitfield.cxxm:162
Reserved-Zero.
Definition bitfield.cxxm:178
Write-0-to-Clear.
Definition bitfield.cxxm:174
Write-1-to-Clear.
Definition bitfield.cxxm:168
Write-1-to-Set.
Definition bitfield.cxxm:170
Write-1-to-Toggle.
Definition bitfield.cxxm:172
Write-Any-to-Clear.
Definition bitfield.cxxm:184
Write-Only.
Definition bitfield.cxxm:166
Write-Once-Only.
Definition bitfield.cxxm:186