35 consteval explicit none() =
default;
44 consteval explicit operator bool()
const;
67 template<
typename... ARGS>
75 template<
typename TYPE>
91 template <
typename TYPE>
92 concept Comparable =
requires(
const TYPE& t1,
const TYPE& t2) {
93 { t1 == t2 } -> std::same_as<bool>;
94 { t1 != t2 } -> std::same_as<bool>;
95 { t1 < t2 } -> std::same_as<bool>;
96 { t1 <= t2 } -> std::same_as<bool>;
97 { t1 > t2 } -> std::same_as<bool>;
98 { t1 >= t2 } -> std::same_as<bool>;
113 template <
typename TYPE>
114 concept Printable =
requires(std::ostream& os,
const TYPE& t) {
115 { os << t } -> std::same_as<std::ostream&>;
135 template <
typename Callback,
typename ReturnType,
typename... Args>
136 concept CallbackOf =
requires(Callback callback, Args&&... args) {
137 { callback(std::forward<Args>(args)...) } -> std::same_as<ReturnType>;
158 template <
typename Callback,
typename TYPE>
180 template <
typename Callback,
typename TYPE>
201 template <
typename Callback,
typename TYPE>
223 template <
typename Base,
typename Derive>
224 concept SuperOf = std::is_base_of_v<Base, Derive> || std::is_same_v<Base, Derive>;
243 template <
typename Base,
typename Derive>
244 concept ExtendsOf = std::derived_from<Derive, Base> || std::is_same_v<Base, Derive>;
256 static constexpr u_integer SIZE =
sizeof...(INTS);
272 class indexSequenceImpl;
275 class indexSequenceImpl<0, INTS...> {
281 class indexSequenceImpl :
public indexSequenceImpl<NUM - 1, NUM - 1, INTS...> {
283 using type = indexSequenceImpl<NUM - 1, NUM - 1, INTS...>::type;
286 template <u_
integer NUM>
329 template <typename Callback>
333 template <typename R, typename... Args>
335 using ReturnType = R;
336 using Signature = R(Args...);
340 template <
typename R,
typename... Args>
342 using ReturnType = R;
343 using Signature = R(Args...);
347 template <
typename C>
352 using ReturnType = CallType::ReturnType;
353 using Signature = CallType::Signature;
357 template <
typename C,
typename R,
typename... Args>
359 using ReturnType = R;
360 using Signature = R(Args...);
364 template <
typename C,
typename R,
typename... Args>
366 using ReturnType = R;
367 using Signature = R(Args...);
372consteval original::none::operator bool()
const {
385template<original::u_
integer NUM>
387 using sequence = makeIndexSequence::indexSequenceImpl<NUM>::type;
Compile-time sequence of unsigned integers.
Definition types.h:255
static consteval u_integer size() noexcept
Gets the size of the sequence.
Definition types.h:381
Utility for generating index sequences.
Definition types.h:270
friend consteval auto makeSequence() noexcept
Creates an index sequence of given length.
A placeholder type representing the absence of a value.
Definition types.h:32
constexpr ~none()=default
Default destructor (constexpr)
consteval none()=default
Default constructor (consteval)
consteval bool operator!() const
Logical NOT operator.
Definition types.h:376
Validates callback signature compatibility.
Definition types.h:136
Requires type to support all comparison operators.
Definition types.h:92
Combines Comparable and CallbackOf for comparison callbacks.
Definition types.h:159
Constraint for predicate callbacks.
Definition types.h:181
Requires type to be an enumeration.
Definition types.h:76
Checks derivation or type identity using std::derived_from.
Definition types.h:244
Ensures the parameter pack is not empty.
Definition types.h:68
Constraint for mutating operations.
Definition types.h:202
Requires type to support output stream insertion.
Definition types.h:114
Checks inheritance or type equality.
Definition types.h:224
Platform-independent type definitions and compiler/platform detection.
std::uint32_t u_integer
32-bit unsigned integer type for sizes and indexes
Definition config.h:263
Main namespace for the project Original.
Definition algorithms.h:21
consteval auto makeSequence() noexcept
Creates an index sequence of given length.
Definition types.h:386
consteval auto reverseIndexSequenceImpl(indexSequence< Indices... > seq)
Implementation detail for reversing an index sequence.
Definition types.h:392
decltype(reverseIndexSequenceImpl(makeSequence< N >())) makeReverseSequence
Creates a reversed index sequence.
Definition types.h:315
Primary template for general callable types.
Definition types.h:348