#pragma once #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if defined(__has_include) && __has_include() #include #else #include namespace std { namespace filesystem = experimental::filesystem; }; #endif #include "common/common.h" #include "units.hpp" namespace gt { using namespace std::chrono_literals; using namespace std::literals::string_literals; enum Split { MIN = 0, MAX = 1 }; enum Tran { RISE = 0, FALL = 1 }; constexpr int MAX_SPLIT = 2; constexpr int MAX_TRAN = 2; constexpr std::initializer_list SPLIT = {MIN, MAX}; constexpr std::initializer_list TRAN = {RISE, FALL}; constexpr std::initializer_list> SPLIT_TRAN = {{MIN, RISE}, {MIN, FALL}, {MAX, RISE}, {MAX, FALL}}; #define for_each_el(el) for (auto el : SPLIT) #define for_each_el_rf_if(el, rf, c) \ for (auto [el, rf] : SPLIT_TRAN) \ if (c) }; // namespace gt