16 return std::to_string(std::any_cast<const T&>(v));
23 s << std::any_cast<const T&>(v);
29 const std::array<std::array<std::string, 3>, 3>& inputs = std::any_cast<const std::array<std::array<std::string, 3>, 3>&>(v);
31 for (
size_t row = 0; row < 3; ++row)
34 for (
size_t col = 0; col < 3; ++col)
40 s << inputs[row][col];
53 { std::type_index(
typeid(
void)), [](
const std::any&) {
return "{}"; } },
54 { std::type_index(
typeid(
bool)), [](
const std::any& v) {
return std::any_cast<bool>(v) ?
"true" :
"false"; } },
55 { std::type_index(
typeid(
char)), [](
const std::any& v) { std::stringstream s;
const char val = std::any_cast<const char&>(v); s << (val < 0 ?
"-0x" :
"0x") << std::setfill(
'0') << std::setw(2) << std::hex << static_cast<int>(std::abs(val));
return s.str(); }},
56 { std::type_index(
typeid(
unsigned char)), [](
const std::any& v) { std::stringstream s; s <<
"0x" << std::setfill(
'0') << std::setw(2) << std::hex << static_cast<int>(std::any_cast<const unsigned char&>(v));
return s.str(); }},
57 { std::type_index(
typeid(
short)), SimpleToString<short> },
58 { std::type_index(
typeid(
unsigned short)), SimpleToString<unsigned short> },
59 { std::type_index(
typeid(
int)), SimpleToString<int> },
60 { std::type_index(
typeid(
unsigned int)), SimpleToString<unsigned int> },
61 { std::type_index(
typeid(
long long int)), SimpleToString<long long int> },
62 { std::type_index(
typeid(
unsigned long long int)), SimpleToString<unsigned long long int> },
63 { std::type_index(
typeid(
float)), SimpleToString<float> },
64 { std::type_index(
typeid(
double)), SimpleToString<double> },
65 { std::type_index(
typeid(std::string)), [](
const std::any& v) {
return std::any_cast<const std::string&>(v); } },
66 { std::type_index(
typeid(
const char*)), [](
const std::any& v) {
return std::any_cast<const char* const&>(v); } },
67 { std::type_index(
typeid(
Position)), SimpleStreamOperatorToString<Position> },
68 { std::type_index(
typeid(Vector3<double>)), SimpleStreamOperatorToString<Vector3<double>> },
69 { std::type_index(
typeid(
PlayerDiggingFace)), SimpleStreamOperatorToString<PlayerDiggingFace> },
70 { std::type_index(
typeid(
Hand)), SimpleStreamOperatorToString<Hand> },
71 { std::type_index(
typeid(
LogLevel)), SimpleStreamOperatorToString<LogLevel> },
72 { std::type_index(
typeid(std::array<std::array<std::string, 3>, 3>)),
CraftInputs },
80 return it->second(value);
88 return Demangle(value.type().name(),
false);
static std::unordered_map< std::type_index, std::function< std::string(const std::any &)> > registered_types
Maps std::type_index of a std::any to a function to convert it to std::string.
static std::string ToString(const std::any &value)
Give a string representation of a std::any value.
static std::string DefaultToString(const std::any &value)
Default function to convert all unregistered.
static void RegisterType(const std::type_index &index, const std::function< std::string(const std::any &)> &f)
std::string SimpleToString(const std::any &v)
std::string Demangle(const std::string &name, const bool simplify_output)
Demangle a class name.
std::string CraftInputs(const std::any &v)
std::string SimpleStreamOperatorToString(const std::any &v)
Direction PlayerDiggingFace