5#include "core/concepts.hpp"
8template<system_state S>
9void print_state_info(
const S& state) {
10 std::cout <<
"State type: " <<
typeid(S).name() << std::endl;
11 std::cout <<
"Size: " << state.size() << std::endl;
12 std::cout <<
"Values: ";
13 for (
const auto& value : state) {
14 std::cout << value <<
" ";
16 std::cout << std::endl << std::endl;
20template<system_state S>
21void initialize_state(S& state,
typename S::value_type initial_value = {}) {
22 for (std::size_t i = 0; i < state.size(); ++i) {
23 auto it = state.begin();
24 it[i] = initial_value +
static_cast<typename S::value_type
>(i);
29 std::cout <<
"State Concept Usage Examples" << std::endl;
30 std::cout <<
"============================" << std::endl << std::endl;
33 std::vector<double> vector_state(5);
34 initialize_state(vector_state, 1.0);
35 std::cout <<
"Example 1 - Vector State:" << std::endl;
36 print_state_info(vector_state);
39 std::array<float, 4> array_state;
40 initialize_state(array_state, 2.5f);
41 std::cout <<
"Example 2 - Array State:" << std::endl;
42 print_state_info(array_state);
45 std::deque<int> deque_state(3);
46 initialize_state(deque_state, 10);
47 std::cout <<
"Example 3 - Deque State:" << std::endl;
48 print_state_info(deque_state);
53 using value_type = double;
55 std::vector<double> data;
58 CustomState(
const std::string& n, std::size_t size)
59 : data(size, 0.0), name(n) {}
61 std::size_t size()
const {
return data.size(); }
62 auto begin() {
return data.begin(); }
63 auto end() {
return data.end(); }
64 auto begin()
const {
return data.begin(); }
65 auto end()
const {
return data.end(); }
68 double& operator[](std::size_t index) {
return data[index]; }
69 const double& operator[](std::size_t index)
const {
return data[index]; }
71 const std::string& get_name()
const {
return name; }
74 CustomState custom_state(
"MyState", 6);
75 initialize_state(custom_state, 0.5);
76 std::cout <<
"Example 4 - Custom State (name: " << custom_state.get_name() <<
"):" << std::endl;
77 print_state_info(custom_state);