| 718 | } |
| 719 | |
| 720 | std::string Value::asString() const |
| 721 | { |
| 722 | AXASSERT(_type != Type::VECTOR && _type != Type::MAP && _type != Type::INT_KEY_MAP, |
| 723 | "Only base type (bool, string, float, double, int) could be converted"); |
| 724 | |
| 725 | if (_type == Type::STRING) |
| 726 | { |
| 727 | return *_field.strVal; |
| 728 | } |
| 729 | |
| 730 | constexpr auto NUMBER_MAX_DIGITS = 63; |
| 731 | |
| 732 | std::string ret; |
| 733 | size_t n = 0; |
| 734 | switch (_type) |
| 735 | { |
| 736 | case Type::INT_I32: |
| 737 | ret = std::to_string(_field.intVal); |
| 738 | break; |
| 739 | case Type::INT_UI32: |
| 740 | ret = std::to_string(_field.uintVal); |
| 741 | break; |
| 742 | case Type::INT_I64: |
| 743 | ret = std::to_string(_field.int64Val); |
| 744 | break; |
| 745 | case Type::INT_UI64: |
| 746 | ret = std::to_string(_field.uint64Val); |
| 747 | break; |
| 748 | case Type::FLOAT: |
| 749 | ret.reserve(NUMBER_MAX_DIGITS); |
| 750 | fmt::format_to(ret, "{:.7g}", _field.floatVal); |
| 751 | break; |
| 752 | case Type::DOUBLE: |
| 753 | fmt::format_to(ret, "{:.17g}", _field.doubleVal); |
| 754 | break; |
| 755 | case Type::BOOLEAN: |
| 756 | ret = (_field.boolVal ? "true" : "false"); |
| 757 | break; |
| 758 | default: |
| 759 | break; |
| 760 | } |
| 761 | |
| 762 | return ret; |
| 763 | } |
| 764 | |
| 765 | std::string_view Value::asStringRef() const |
| 766 | { |