diff options
author | Richard <q@1bpm.net> | 2022-09-04 00:32:56 +0100 |
---|---|---|
committer | Richard <q@1bpm.net> | 2022-09-04 00:32:56 +0100 |
commit | 1d055261b4144dbf86b2658437015b15d4dd9bff (patch) | |
tree | 6049b19d1bf953a650383de1a5e438b8b82679f6 /include/jsoncons/json_type.hpp | |
download | csound-json-1d055261b4144dbf86b2658437015b15d4dd9bff.tar.gz csound-json-1d055261b4144dbf86b2658437015b15d4dd9bff.tar.bz2 csound-json-1d055261b4144dbf86b2658437015b15d4dd9bff.zip |
initial
Diffstat (limited to 'include/jsoncons/json_type.hpp')
-rw-r--r-- | include/jsoncons/json_type.hpp | 206 |
1 files changed, 206 insertions, 0 deletions
diff --git a/include/jsoncons/json_type.hpp b/include/jsoncons/json_type.hpp new file mode 100644 index 0000000..f642d6b --- /dev/null +++ b/include/jsoncons/json_type.hpp @@ -0,0 +1,206 @@ +// Copyright 2013 Daniel Parker +// Distributed under the Boost license, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + +// See https://github.com/danielaparker/jsoncons for latest version + +#ifndef JSONCONS_JSON_TYPE_HPP +#define JSONCONS_JSON_TYPE_HPP + +#include <ostream> +#include <jsoncons/config/jsoncons_config.hpp> + +namespace jsoncons { + + enum class json_type : uint8_t + { + null_value, + bool_value, + int64_value, + uint64_value, + half_value, + double_value, + string_value, + byte_string_value, + array_value, + object_value + }; + + template <class CharT> + std::basic_ostream<CharT>& operator<<(std::basic_ostream<CharT>& os, json_type type) + { + static constexpr const CharT* null_value = JSONCONS_CSTRING_CONSTANT(CharT, "null"); + static constexpr const CharT* bool_value = JSONCONS_CSTRING_CONSTANT(CharT, "bool"); + static constexpr const CharT* int64_value = JSONCONS_CSTRING_CONSTANT(CharT, "int64"); + static constexpr const CharT* uint64_value = JSONCONS_CSTRING_CONSTANT(CharT, "uint64"); + static constexpr const CharT* half_value = JSONCONS_CSTRING_CONSTANT(CharT, "half"); + static constexpr const CharT* double_value = JSONCONS_CSTRING_CONSTANT(CharT, "double"); + static constexpr const CharT* string_value = JSONCONS_CSTRING_CONSTANT(CharT, "string"); + static constexpr const CharT* byte_string_value = JSONCONS_CSTRING_CONSTANT(CharT, "byte_string"); + static constexpr const CharT* array_value = JSONCONS_CSTRING_CONSTANT(CharT, "array"); + static constexpr const CharT* object_value = JSONCONS_CSTRING_CONSTANT(CharT, "object"); + + switch (type) + { + case json_type::null_value: + { + os << null_value; + break; + } + case json_type::bool_value: + { + os << bool_value; + break; + } + case json_type::int64_value: + { + os << int64_value; + break; + } + case json_type::uint64_value: + { + os << uint64_value; + break; + } + case json_type::half_value: + { + os << half_value; + break; + } + case json_type::double_value: + { + os << double_value; + break; + } + case json_type::string_value: + { + os << string_value; + break; + } + case json_type::byte_string_value: + { + os << byte_string_value; + break; + } + case json_type::array_value: + { + os << array_value; + break; + } + case json_type::object_value: + { + os << object_value; + break; + } + } + return os; + } + + enum class json_storage_kind : uint8_t + { + null_value = 0x00, + bool_value = 0x01, + int64_value = 0x02, + uint64_value = 0x03, + half_value = 0x04, + double_value = 0x05, + short_string_value = 0x06, + long_string_value = 0x07, + byte_string_value = 0x08, + array_value = 0x09, + empty_object_value = 0x0a, + object_value = 0x0b, + json_const_pointer = 0x0c + }; + + template <class CharT> + std::basic_ostream<CharT>& operator<<(std::basic_ostream<CharT>& os, json_storage_kind storage) + { + static constexpr const CharT* null_value = JSONCONS_CSTRING_CONSTANT(CharT, "null"); + static constexpr const CharT* bool_value = JSONCONS_CSTRING_CONSTANT(CharT, "bool"); + static constexpr const CharT* int64_value = JSONCONS_CSTRING_CONSTANT(CharT, "int64"); + static constexpr const CharT* uint64_value = JSONCONS_CSTRING_CONSTANT(CharT, "uint64"); + static constexpr const CharT* half_value = JSONCONS_CSTRING_CONSTANT(CharT, "half"); + static constexpr const CharT* double_value = JSONCONS_CSTRING_CONSTANT(CharT, "double"); + static constexpr const CharT* short_string_value = JSONCONS_CSTRING_CONSTANT(CharT, "short_string"); + static constexpr const CharT* long_string_value = JSONCONS_CSTRING_CONSTANT(CharT, "string"); + static constexpr const CharT* byte_string_value = JSONCONS_CSTRING_CONSTANT(CharT, "byte_string"); + static constexpr const CharT* array_value = JSONCONS_CSTRING_CONSTANT(CharT, "array"); + static constexpr const CharT* empty_object_value = JSONCONS_CSTRING_CONSTANT(CharT, "empty_object"); + static constexpr const CharT* object_value = JSONCONS_CSTRING_CONSTANT(CharT, "object"); + static constexpr const CharT* json_const_pointer = JSONCONS_CSTRING_CONSTANT(CharT, "json_const_pointer"); + + switch (storage) + { + case json_storage_kind::null_value: + { + os << null_value; + break; + } + case json_storage_kind::bool_value: + { + os << bool_value; + break; + } + case json_storage_kind::int64_value: + { + os << int64_value; + break; + } + case json_storage_kind::uint64_value: + { + os << uint64_value; + break; + } + case json_storage_kind::half_value: + { + os << half_value; + break; + } + case json_storage_kind::double_value: + { + os << double_value; + break; + } + case json_storage_kind::short_string_value: + { + os << short_string_value; + break; + } + case json_storage_kind::long_string_value: + { + os << long_string_value; + break; + } + case json_storage_kind::byte_string_value: + { + os << byte_string_value; + break; + } + case json_storage_kind::array_value: + { + os << array_value; + break; + } + case json_storage_kind::empty_object_value: + { + os << empty_object_value; + break; + } + case json_storage_kind::object_value: + { + os << object_value; + break; + } + case json_storage_kind::json_const_pointer: + { + os << json_const_pointer; + break; + } + } + return os; + } + +} // jsoncons + +#endif |