#ifdef NALL_STRING_INTERNAL_HPP namespace nall { //convert any (supported) type to a const char* without constructing a new nall::string //this is used inside istring(...) to build nall::string values template struct stringify; // base types template<> struct stringify { bool value; operator const char*() const { return value ? "true" : "false"; } stringify(bool value) : value(value) {} }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(char value) { integer(data, value); } }; // signed integers template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(signed char value) { integer(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(signed short value) { integer(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(signed int value) { integer(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(signed long value) { integer(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(signed long long value) { integer(data, value); } }; template struct stringify> { char data[256]; operator const char*() const { return data; } stringify(int_t value) { integer(data, value); } }; // unsigned integers template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(unsigned char value) { decimal(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(unsigned short value) { decimal(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(unsigned int value) { decimal(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(unsigned long value) { decimal(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(unsigned long long value) { decimal(data, value); } }; template struct stringify> { char data[256]; operator const char*() const { return data; } stringify(uint_t value) { decimal(data, value); } }; // floating-point template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(float value) { fp(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(double value) { fp(data, value); } }; template<> struct stringify { char data[256]; operator const char*() const { return data; } stringify(long double value) { fp(data, value); } }; // strings template<> struct stringify { const char *value; operator const char*() const { return value; } stringify(char *value) : value(value) {} }; template<> struct stringify { const char *value; operator const char*() const { return value; } stringify(const char *value) : value(value) {} }; template<> struct stringify { const string &value; operator const char*() const { return value; } stringify(const string &value) : value(value) {} }; template<> struct stringify { const string &value; operator const char*() const { return value; } stringify(const string &value) : value(value) {} }; template<> struct stringify { const char *value; operator const char*() const { return value; } stringify(const cstring &value) : value(value) {} }; template<> struct stringify { const char *value; operator const char*() const { return value; } stringify(const cstring &value) : value(value) {} }; #if defined(QSTRING_H) template<> struct stringify { const QString &value; operator const char*() const { return value.toUtf8().constData(); } stringify(const QString &value) : value(value) {} }; template<> struct stringify { const QString &value; operator const char*() const { return value.toUtf8().constData(); } stringify(const QString &value) : value(value) {} }; string::operator QString() const { return QString::fromUtf8(*this); } #endif // template stringify make_string(T value) { return stringify(std::forward(value)); } } #endif