#pragma once #include #include #include #include namespace fsh::util { extern const char* tokens[]; template static inline std::optional mk_optional(T t){ if(t){ return t->gvalue(); } return std::optional(); } static inline bool contains(char x, std::string text) { for (const auto& chr : text){ if(chr == x) return 1; } return 0; }; static inline std::ifstream input(const std::string& x) { std::ifstream in(x, std::ios::in); if(!in) { throw std::runtime_error("Can't open file"); } return in; } static inline std::ofstream output(const std::string& x) { std::ofstream out(x, std::ios::out); if(!out.is_open()) { throw std::runtime_error("Can't open file"); } return out; } static inline std::ofstream output_append(const std::string& x) { std::ofstream out(x, std::ios::app | std::ios::out); if(!out.is_open()) { throw std::runtime_error("Can't open file"); } return out; } }