Program Listing for File concepts.hpp

Return to documentation for file (include/core/concepts.hpp)

#pragma once
#include <concepts>
#include <type_traits>
#include <iterator>
#include <string>

// Time type concept - basic arithmetic types that can represent time
template<typename T>
concept can_be_time = std::is_arithmetic_v<T>;

// State concept - supports vectors, matrices, multi-dimensional tensors, etc.
template<typename T>
concept system_state = requires(T state) {
    typename T::value_type;
    requires std::is_arithmetic_v<typename T::value_type>;
    requires !std::same_as<T, std::string>; // Exclude string types
    requires requires {
        { state.size() } -> std::convertible_to<std::size_t>;
        { state.begin() } -> std::random_access_iterator;
        { state.end() } -> std::random_access_iterator;
    };
    { state[0] } -> std::convertible_to<typename T::value_type>;
};