#include "utils.h" inline ZYM::int2048 Any2Int(const std::any &value) { if (auto ptr = std::any_cast(&value)) return *ptr; else if (auto ptr = std::any_cast(&value)) return std::move(ZYM::int2048(*ptr)); else if (auto ptr = std::any_cast(&value)) { std::stringstream buf; buf << std::fixed << std::setprecision(0) << *ptr; std::string tmp; buf >> tmp; return std::move(ZYM::int2048(tmp)); } else if (auto ptr = std::any_cast(&value)) return std::move(ZYM::int2048((long long)(*ptr))); else if (auto ptr = std::any_cast(&value)) { std::string str = *ptr; size_t dot_position = str.find('.'); if (dot_position != std::string::npos) { std::string integer_part = str.substr(0, dot_position); str = integer_part; } return std::move(ZYM::int2048(str)); } else throw FatalError("Any2Int2048: unknown type"); } double Any2Float(const std::any &value) { if (auto ptr = std::any_cast(&value)) return *ptr; else if (auto ptr = std::any_cast(&value)) { double res = 0; std::stringstream buf; buf << *ptr; std::string tmp; buf >> tmp; int p = 0; if (tmp[0] == '-') p++; for (; p < tmp.size(); p++) res = res * 10 + tmp[p] - '0'; if (tmp[0] == '-') res = -res; return res; } else if (auto ptr = std::any_cast(&value)) return (double)(*ptr); else if (auto ptr = std::any_cast(&value)) return std::stod(*ptr); else throw FatalError("Any2Float: unknown type"); } std::string Any2String(const std::any &value) { std::stringstream buf; std::string res; if (auto ptr = std::any_cast(&value)) { buf << std::setiosflags(std::ios::fixed) << std::setprecision(15) << *ptr; } else if (auto ptr = std::any_cast(&value)) { if (*ptr) buf << "True"; else buf << "False"; } else if (auto ptr = std::any_cast(&value)) buf << *ptr; else if (auto ptr = std::any_cast(&value)) buf << *ptr; else throw FatalError("Any2String: unknown type"); buf >> res; return res; } bool Any2Bool(const std::any &value) { if (auto ptr = std::any_cast(&value)) { return (*ptr) != 0; } else if (auto ptr = std::any_cast(&value)) { return (*ptr) != 0; } else if (auto ptr = std::any_cast(&value)) { return *ptr; } else if (auto ptr = std::any_cast(&value)) { return (*ptr) != ""; } else throw FatalError("Any2Bool: unknown type"); } std::any DeQuate(std::any val, VariableContainer &Variables) { if (auto ptr = std::any_cast>(&val)) { for (int i = 0; i < ptr->size(); i++) (*ptr)[i] = DeQuate((*ptr)[i], Variables); return *ptr; } else if (auto ptr = std::any_cast(&val)) { return Variables.ReadVariable(ptr->name); } else if (std::any_cast(&val) || std::any_cast(&val) || std::any_cast(&val) || std::any_cast(&val) || std::any_cast(&val)) return val; else throw FatalError("DeQuate: unknown type"); }