|
|
constexpr | ExtensionalCardinal (W v) noexcept |
template<std::integral S>
requires (!std::same_as<S, W>) |
| constexpr | ExtensionalCardinal (S v) noexcept |
| | Construction from any integral type via two's-complement wrapping. The explicit static_cast keeps the sign-conversion at this boundary rather than at each call site.
|
|
constexpr | operator std::size_t () const noexcept |
| | Explicit projection to std::size_t. Used by :sequences:path 's helpers when the user-chosen Index Form flows through a std::size_t counter. Explicit, so a word wider than std::size_t is never narrowed silently.
|
|
constexpr ExtensionalCardinal | operator- () const noexcept |
| | The additive inverse in ℤ/2^w.
|
|
constexpr std::size_t | realize_to_size_t (std::size_t sentinel=std::numeric_limits< std::size_t >::max()) const noexcept |
| | The value as std::size_t, or sentinel when it does not fit (only possible for a word wider than std::size_t).
|
|
|
constexpr friend bool | operator== (const ExtensionalCardinal &, const ExtensionalCardinal &)=default |
|
constexpr friend std::strong_ordering | operator<=> (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept |
|
constexpr friend ExtensionalCardinal | operator+ (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept |
|
constexpr friend ExtensionalCardinal | operator* (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept |
|
constexpr friend ExtensionalCardinal | operator- (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept |
|
constexpr friend ExtensionalCardinal | operator/ (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept |
| | Euclidean division. Division by zero yields zero by convention (total).
|
|
constexpr friend ExtensionalCardinal | operator% (const ExtensionalCardinal &lhs, const ExtensionalCardinal &rhs) noexcept |
| | Euclidean modulo. Division by zero yields lhs by convention (total).
|
template<IsWrappingWord W = std::size_t>
struct dedekind::sets::ExtensionalCardinal< W >
Finite extensional cardinal: one machine word W.
The bare carrier is the wrapping ring ℤ/2^w (registered periodic and cyclic below); Cardinality adjoins the saturating ℵ_0 on top. It is not a bignum: its width is the width of W. Overflow is detected with the compiler's checked-arithmetic builtins, which compute exactly for any word width, so no promotion to int can overflow on the way.
- Template Parameters
-
| W | The word (default std::size_t). |
template<IsWrappingWord W = std::size_t>
template<std::integral S>
requires (!std::same_as<S, W>)
Construction from any integral type via two's-complement wrapping. The explicit static_cast keeps the sign-conversion at this boundary rather than at each call site.
Intentionally non-explicit so integral values convert implicitly when initialising or passing a Cardinality (= std::variant< ExtensionalCardinal<>, ℵ_0>), the load-bearing path for the ℕ-as-Cardinality carrier reading.