adjusted code to documentation
This commit is contained in:
		
							parent
							
								
									a3210ee2a9
								
							
						
					
					
						commit
						02f617f083
					
				
					 2 changed files with 78 additions and 78 deletions
				
			
		
							
								
								
									
										78
									
								
								src/json.hpp
									
										
									
									
									
								
							
							
						
						
									
										78
									
								
								src/json.hpp
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -62,7 +62,7 @@ struct has_mapped_type
 | 
			
		|||
                           (@c int64_t by default)
 | 
			
		||||
@tparam NumberFloatType    type for JSON floating-point numbers
 | 
			
		||||
                           (@c double by default)
 | 
			
		||||
@tparam Allocator          type of the allocator to use
 | 
			
		||||
@tparam AllocatorType      type of the allocator to use
 | 
			
		||||
                           (@c std::allocator by default)
 | 
			
		||||
 | 
			
		||||
@note ObjectType trick from http://stackoverflow.com/a/9860911
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ template <
 | 
			
		|||
    class BooleanType = bool,
 | 
			
		||||
    class NumberIntegerType = int64_t,
 | 
			
		||||
    class NumberFloatType = double,
 | 
			
		||||
    template<typename U> class Allocator = std::allocator
 | 
			
		||||
    template<typename U> class AllocatorType = std::allocator
 | 
			
		||||
    >
 | 
			
		||||
class basic_json
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -102,13 +102,13 @@ class basic_json
 | 
			
		|||
    @brief the type of an element reference
 | 
			
		||||
    @ingroup container
 | 
			
		||||
    */
 | 
			
		||||
    using reference = basic_json&;
 | 
			
		||||
    using reference = value_type&;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief the type of an element const reference
 | 
			
		||||
    @ingroup container
 | 
			
		||||
    */
 | 
			
		||||
    using const_reference = const basic_json&;
 | 
			
		||||
    using const_reference = const value_type&;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief a type to represent differences between iterators
 | 
			
		||||
| 
						 | 
				
			
			@ -123,12 +123,12 @@ class basic_json
 | 
			
		|||
    using size_type = std::size_t;
 | 
			
		||||
 | 
			
		||||
    /// the allocator type
 | 
			
		||||
    using allocator_type = Allocator<basic_json>;
 | 
			
		||||
    using allocator_type = AllocatorType<basic_json>;
 | 
			
		||||
 | 
			
		||||
    /// the type of an element pointer
 | 
			
		||||
    using pointer = basic_json*;
 | 
			
		||||
    using pointer = typename std::allocator_traits<allocator_type>::pointer;
 | 
			
		||||
    /// the type of an element const pointer
 | 
			
		||||
    using const_pointer = const basic_json*;
 | 
			
		||||
    using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief an iterator for a basic_json container
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +333,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::object):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<object_t> alloc;
 | 
			
		||||
                AllocatorType<object_t> alloc;
 | 
			
		||||
                m_value.object = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.object);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +341,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::array):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<array_t> alloc;
 | 
			
		||||
                AllocatorType<array_t> alloc;
 | 
			
		||||
                m_value.array = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.array);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -349,7 +349,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::string):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<string_t> alloc;
 | 
			
		||||
                AllocatorType<string_t> alloc;
 | 
			
		||||
                m_value.string = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.string, "");
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const object_t& value)
 | 
			
		||||
        : m_type(value_t::object)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<object_t> alloc;
 | 
			
		||||
        AllocatorType<object_t> alloc;
 | 
			
		||||
        m_value.object = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.object, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -404,7 +404,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const V& value)
 | 
			
		||||
        : m_type(value_t::object)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<object_t> alloc;
 | 
			
		||||
        AllocatorType<object_t> alloc;
 | 
			
		||||
        m_value.object = alloc.allocate(1);
 | 
			
		||||
        using std::begin;
 | 
			
		||||
        using std::end;
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +415,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const array_t& value)
 | 
			
		||||
        : m_type(value_t::array)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<array_t> alloc;
 | 
			
		||||
        AllocatorType<array_t> alloc;
 | 
			
		||||
        m_value.array = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.array, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -434,7 +434,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const V& value)
 | 
			
		||||
        : m_type(value_t::array)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<array_t> alloc;
 | 
			
		||||
        AllocatorType<array_t> alloc;
 | 
			
		||||
        m_value.array = alloc.allocate(1);
 | 
			
		||||
        using std::begin;
 | 
			
		||||
        using std::end;
 | 
			
		||||
| 
						 | 
				
			
			@ -445,7 +445,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const string_t& value)
 | 
			
		||||
        : m_type(value_t::string)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<string_t> alloc;
 | 
			
		||||
        AllocatorType<string_t> alloc;
 | 
			
		||||
        m_value.string = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.string, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -454,7 +454,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const typename string_t::value_type* value)
 | 
			
		||||
        : m_type(value_t::string)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<string_t> alloc;
 | 
			
		||||
        AllocatorType<string_t> alloc;
 | 
			
		||||
        m_value.string = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.string, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -547,7 +547,7 @@ class basic_json
 | 
			
		|||
        {
 | 
			
		||||
            // the initializer list is a list of pairs -> create object
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -560,7 +560,7 @@ class basic_json
 | 
			
		|||
        {
 | 
			
		||||
            // the initializer list describes an array -> create array
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array, std::move(l));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -602,7 +602,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::object):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<object_t> alloc;
 | 
			
		||||
                AllocatorType<object_t> alloc;
 | 
			
		||||
                m_value.object = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.object, *other.m_value.object);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -610,7 +610,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::array):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<array_t> alloc;
 | 
			
		||||
                AllocatorType<array_t> alloc;
 | 
			
		||||
                m_value.array = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.array, *other.m_value.array);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -618,7 +618,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::string):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<string_t> alloc;
 | 
			
		||||
                AllocatorType<string_t> alloc;
 | 
			
		||||
                m_value.string = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.string, *other.m_value.string);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -680,7 +680,7 @@ class basic_json
 | 
			
		|||
        {
 | 
			
		||||
            case (value_t::object):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<object_t> alloc;
 | 
			
		||||
                AllocatorType<object_t> alloc;
 | 
			
		||||
                alloc.destroy(m_value.object);
 | 
			
		||||
                alloc.deallocate(m_value.object, 1);
 | 
			
		||||
                m_value.object = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -689,7 +689,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::array):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<array_t> alloc;
 | 
			
		||||
                AllocatorType<array_t> alloc;
 | 
			
		||||
                alloc.destroy(m_value.array);
 | 
			
		||||
                alloc.deallocate(m_value.array, 1);
 | 
			
		||||
                m_value.array = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -698,7 +698,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::string):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<string_t> alloc;
 | 
			
		||||
                AllocatorType<string_t> alloc;
 | 
			
		||||
                alloc.destroy(m_value.string);
 | 
			
		||||
                alloc.deallocate(m_value.string, 1);
 | 
			
		||||
                m_value.string = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -1041,7 +1041,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1103,7 +1103,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1130,14 +1130,14 @@ class basic_json
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /// access specified element (needed for clang)
 | 
			
		||||
    template<typename T, size_t n>
 | 
			
		||||
    template<typename T, std::size_t n>
 | 
			
		||||
    inline reference operator[](const T (&key)[n])
 | 
			
		||||
    {
 | 
			
		||||
        // implicitly convert null to object
 | 
			
		||||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1152,7 +1152,7 @@ class basic_json
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /// access specified element (needed for clang)
 | 
			
		||||
    template<typename T, size_t n>
 | 
			
		||||
    template<typename T, std::size_t n>
 | 
			
		||||
    inline const_reference operator[](const T (&key)[n]) const
 | 
			
		||||
    {
 | 
			
		||||
        // at only works for objects
 | 
			
		||||
| 
						 | 
				
			
			@ -1300,7 +1300,7 @@ class basic_json
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /// remove element from an array given an index
 | 
			
		||||
    inline void erase(const size_type pos)
 | 
			
		||||
    inline void erase(const size_type idx)
 | 
			
		||||
    {
 | 
			
		||||
        // this erase only works for arrays
 | 
			
		||||
        if (m_type != value_t::array)
 | 
			
		||||
| 
						 | 
				
			
			@ -1308,12 +1308,12 @@ class basic_json
 | 
			
		|||
            throw std::runtime_error("cannot use erase with " + type_name());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (pos >= size())
 | 
			
		||||
        if (idx >= size())
 | 
			
		||||
        {
 | 
			
		||||
            throw std::out_of_range("index out of range");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(pos));
 | 
			
		||||
        m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// find an element in an object
 | 
			
		||||
| 
						 | 
				
			
			@ -1638,7 +1638,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1669,7 +1669,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1698,7 +1698,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -3489,13 +3489,13 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
        @see <http://en.wikipedia.org/wiki/UTF-8#Sample_code>
 | 
			
		||||
        */
 | 
			
		||||
        inline static string_t to_unicode(const size_t codepoint1,
 | 
			
		||||
                                          const size_t codepoint2 = 0)
 | 
			
		||||
        inline static string_t to_unicode(const std::size_t codepoint1,
 | 
			
		||||
                                          const std::size_t codepoint2 = 0)
 | 
			
		||||
        {
 | 
			
		||||
            string_t result;
 | 
			
		||||
 | 
			
		||||
            // calculate the codepoint from the given code points
 | 
			
		||||
            size_t codepoint = codepoint1;
 | 
			
		||||
            std::size_t codepoint = codepoint1;
 | 
			
		||||
            if (codepoint1 >= 0xD800 and codepoint1 <= 0xDBFF)
 | 
			
		||||
            {
 | 
			
		||||
                if (codepoint2 >= 0xDC00 and codepoint2 <= 0xDFFF)
 | 
			
		||||
| 
						 | 
				
			
			@ -4806,7 +4806,7 @@ template <>
 | 
			
		|||
struct hash<nlohmann::json>
 | 
			
		||||
{
 | 
			
		||||
    /// return a hash value for a JSON object
 | 
			
		||||
    inline size_t operator()(const nlohmann::json& j) const
 | 
			
		||||
    inline std::size_t operator()(const nlohmann::json& j) const
 | 
			
		||||
    {
 | 
			
		||||
        // a naive hashing via the string representation
 | 
			
		||||
        const auto& h = hash<nlohmann::json::string_t>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -62,7 +62,7 @@ struct has_mapped_type
 | 
			
		|||
                           (@c int64_t by default)
 | 
			
		||||
@tparam NumberFloatType    type for JSON floating-point numbers
 | 
			
		||||
                           (@c double by default)
 | 
			
		||||
@tparam Allocator          type of the allocator to use
 | 
			
		||||
@tparam AllocatorType      type of the allocator to use
 | 
			
		||||
                           (@c std::allocator by default)
 | 
			
		||||
 | 
			
		||||
@note ObjectType trick from http://stackoverflow.com/a/9860911
 | 
			
		||||
| 
						 | 
				
			
			@ -77,7 +77,7 @@ template <
 | 
			
		|||
    class BooleanType = bool,
 | 
			
		||||
    class NumberIntegerType = int64_t,
 | 
			
		||||
    class NumberFloatType = double,
 | 
			
		||||
    template<typename U> class Allocator = std::allocator
 | 
			
		||||
    template<typename U> class AllocatorType = std::allocator
 | 
			
		||||
    >
 | 
			
		||||
class basic_json
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -102,13 +102,13 @@ class basic_json
 | 
			
		|||
    @brief the type of an element reference
 | 
			
		||||
    @ingroup container
 | 
			
		||||
    */
 | 
			
		||||
    using reference = basic_json&;
 | 
			
		||||
    using reference = value_type&;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief the type of an element const reference
 | 
			
		||||
    @ingroup container
 | 
			
		||||
    */
 | 
			
		||||
    using const_reference = const basic_json&;
 | 
			
		||||
    using const_reference = const value_type&;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief a type to represent differences between iterators
 | 
			
		||||
| 
						 | 
				
			
			@ -123,12 +123,12 @@ class basic_json
 | 
			
		|||
    using size_type = std::size_t;
 | 
			
		||||
 | 
			
		||||
    /// the allocator type
 | 
			
		||||
    using allocator_type = Allocator<basic_json>;
 | 
			
		||||
    using allocator_type = AllocatorType<basic_json>;
 | 
			
		||||
 | 
			
		||||
    /// the type of an element pointer
 | 
			
		||||
    using pointer = basic_json*;
 | 
			
		||||
    using pointer = typename std::allocator_traits<allocator_type>::pointer;
 | 
			
		||||
    /// the type of an element const pointer
 | 
			
		||||
    using const_pointer = const basic_json*;
 | 
			
		||||
    using const_pointer = typename std::allocator_traits<allocator_type>::const_pointer;
 | 
			
		||||
 | 
			
		||||
    /*!
 | 
			
		||||
    @brief an iterator for a basic_json container
 | 
			
		||||
| 
						 | 
				
			
			@ -333,7 +333,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::object):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<object_t> alloc;
 | 
			
		||||
                AllocatorType<object_t> alloc;
 | 
			
		||||
                m_value.object = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.object);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -341,7 +341,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::array):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<array_t> alloc;
 | 
			
		||||
                AllocatorType<array_t> alloc;
 | 
			
		||||
                m_value.array = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.array);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -349,7 +349,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::string):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<string_t> alloc;
 | 
			
		||||
                AllocatorType<string_t> alloc;
 | 
			
		||||
                m_value.string = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.string, "");
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -390,7 +390,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const object_t& value)
 | 
			
		||||
        : m_type(value_t::object)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<object_t> alloc;
 | 
			
		||||
        AllocatorType<object_t> alloc;
 | 
			
		||||
        m_value.object = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.object, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -404,7 +404,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const V& value)
 | 
			
		||||
        : m_type(value_t::object)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<object_t> alloc;
 | 
			
		||||
        AllocatorType<object_t> alloc;
 | 
			
		||||
        m_value.object = alloc.allocate(1);
 | 
			
		||||
        using std::begin;
 | 
			
		||||
        using std::end;
 | 
			
		||||
| 
						 | 
				
			
			@ -415,7 +415,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const array_t& value)
 | 
			
		||||
        : m_type(value_t::array)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<array_t> alloc;
 | 
			
		||||
        AllocatorType<array_t> alloc;
 | 
			
		||||
        m_value.array = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.array, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -434,7 +434,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const V& value)
 | 
			
		||||
        : m_type(value_t::array)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<array_t> alloc;
 | 
			
		||||
        AllocatorType<array_t> alloc;
 | 
			
		||||
        m_value.array = alloc.allocate(1);
 | 
			
		||||
        using std::begin;
 | 
			
		||||
        using std::end;
 | 
			
		||||
| 
						 | 
				
			
			@ -445,7 +445,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const string_t& value)
 | 
			
		||||
        : m_type(value_t::string)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<string_t> alloc;
 | 
			
		||||
        AllocatorType<string_t> alloc;
 | 
			
		||||
        m_value.string = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.string, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -454,7 +454,7 @@ class basic_json
 | 
			
		|||
    inline basic_json(const typename string_t::value_type* value)
 | 
			
		||||
        : m_type(value_t::string)
 | 
			
		||||
    {
 | 
			
		||||
        Allocator<string_t> alloc;
 | 
			
		||||
        AllocatorType<string_t> alloc;
 | 
			
		||||
        m_value.string = alloc.allocate(1);
 | 
			
		||||
        alloc.construct(m_value.string, value);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -547,7 +547,7 @@ class basic_json
 | 
			
		|||
        {
 | 
			
		||||
            // the initializer list is a list of pairs -> create object
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -560,7 +560,7 @@ class basic_json
 | 
			
		|||
        {
 | 
			
		||||
            // the initializer list describes an array -> create array
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array, std::move(l));
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -602,7 +602,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::object):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<object_t> alloc;
 | 
			
		||||
                AllocatorType<object_t> alloc;
 | 
			
		||||
                m_value.object = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.object, *other.m_value.object);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -610,7 +610,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::array):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<array_t> alloc;
 | 
			
		||||
                AllocatorType<array_t> alloc;
 | 
			
		||||
                m_value.array = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.array, *other.m_value.array);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -618,7 +618,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::string):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<string_t> alloc;
 | 
			
		||||
                AllocatorType<string_t> alloc;
 | 
			
		||||
                m_value.string = alloc.allocate(1);
 | 
			
		||||
                alloc.construct(m_value.string, *other.m_value.string);
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -680,7 +680,7 @@ class basic_json
 | 
			
		|||
        {
 | 
			
		||||
            case (value_t::object):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<object_t> alloc;
 | 
			
		||||
                AllocatorType<object_t> alloc;
 | 
			
		||||
                alloc.destroy(m_value.object);
 | 
			
		||||
                alloc.deallocate(m_value.object, 1);
 | 
			
		||||
                m_value.object = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -689,7 +689,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::array):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<array_t> alloc;
 | 
			
		||||
                AllocatorType<array_t> alloc;
 | 
			
		||||
                alloc.destroy(m_value.array);
 | 
			
		||||
                alloc.deallocate(m_value.array, 1);
 | 
			
		||||
                m_value.array = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -698,7 +698,7 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
            case (value_t::string):
 | 
			
		||||
            {
 | 
			
		||||
                Allocator<string_t> alloc;
 | 
			
		||||
                AllocatorType<string_t> alloc;
 | 
			
		||||
                alloc.destroy(m_value.string);
 | 
			
		||||
                alloc.deallocate(m_value.string, 1);
 | 
			
		||||
                m_value.string = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -1041,7 +1041,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1103,7 +1103,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1130,14 +1130,14 @@ class basic_json
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /// access specified element (needed for clang)
 | 
			
		||||
    template<typename T, size_t n>
 | 
			
		||||
    template<typename T, std::size_t n>
 | 
			
		||||
    inline reference operator[](const T (&key)[n])
 | 
			
		||||
    {
 | 
			
		||||
        // implicitly convert null to object
 | 
			
		||||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1152,7 +1152,7 @@ class basic_json
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /// access specified element (needed for clang)
 | 
			
		||||
    template<typename T, size_t n>
 | 
			
		||||
    template<typename T, std::size_t n>
 | 
			
		||||
    inline const_reference operator[](const T (&key)[n]) const
 | 
			
		||||
    {
 | 
			
		||||
        // at only works for objects
 | 
			
		||||
| 
						 | 
				
			
			@ -1300,7 +1300,7 @@ class basic_json
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    /// remove element from an array given an index
 | 
			
		||||
    inline void erase(const size_type pos)
 | 
			
		||||
    inline void erase(const size_type idx)
 | 
			
		||||
    {
 | 
			
		||||
        // this erase only works for arrays
 | 
			
		||||
        if (m_type != value_t::array)
 | 
			
		||||
| 
						 | 
				
			
			@ -1308,12 +1308,12 @@ class basic_json
 | 
			
		|||
            throw std::runtime_error("cannot use erase with " + type_name());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (pos >= size())
 | 
			
		||||
        if (idx >= size())
 | 
			
		||||
        {
 | 
			
		||||
            throw std::out_of_range("index out of range");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(pos));
 | 
			
		||||
        m_value.array->erase(m_value.array->begin() + static_cast<difference_type>(idx));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// find an element in an object
 | 
			
		||||
| 
						 | 
				
			
			@ -1638,7 +1638,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1669,7 +1669,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::array;
 | 
			
		||||
            Allocator<array_t> alloc;
 | 
			
		||||
            AllocatorType<array_t> alloc;
 | 
			
		||||
            m_value.array = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.array);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -1698,7 +1698,7 @@ class basic_json
 | 
			
		|||
        if (m_type == value_t::null)
 | 
			
		||||
        {
 | 
			
		||||
            m_type = value_t::object;
 | 
			
		||||
            Allocator<object_t> alloc;
 | 
			
		||||
            AllocatorType<object_t> alloc;
 | 
			
		||||
            m_value.object = alloc.allocate(1);
 | 
			
		||||
            alloc.construct(m_value.object);
 | 
			
		||||
        }
 | 
			
		||||
| 
						 | 
				
			
			@ -3489,13 +3489,13 @@ class basic_json
 | 
			
		|||
 | 
			
		||||
        @see <http://en.wikipedia.org/wiki/UTF-8#Sample_code>
 | 
			
		||||
        */
 | 
			
		||||
        inline static string_t to_unicode(const size_t codepoint1,
 | 
			
		||||
                                          const size_t codepoint2 = 0)
 | 
			
		||||
        inline static string_t to_unicode(const std::size_t codepoint1,
 | 
			
		||||
                                          const std::size_t codepoint2 = 0)
 | 
			
		||||
        {
 | 
			
		||||
            string_t result;
 | 
			
		||||
 | 
			
		||||
            // calculate the codepoint from the given code points
 | 
			
		||||
            size_t codepoint = codepoint1;
 | 
			
		||||
            std::size_t codepoint = codepoint1;
 | 
			
		||||
            if (codepoint1 >= 0xD800 and codepoint1 <= 0xDBFF)
 | 
			
		||||
            {
 | 
			
		||||
                if (codepoint2 >= 0xDC00 and codepoint2 <= 0xDFFF)
 | 
			
		||||
| 
						 | 
				
			
			@ -4112,7 +4112,7 @@ template <>
 | 
			
		|||
struct hash<nlohmann::json>
 | 
			
		||||
{
 | 
			
		||||
    /// return a hash value for a JSON object
 | 
			
		||||
    inline size_t operator()(const nlohmann::json& j) const
 | 
			
		||||
    inline std::size_t operator()(const nlohmann::json& j) const
 | 
			
		||||
    {
 | 
			
		||||
        // a naive hashing via the string representation
 | 
			
		||||
        const auto& h = hash<nlohmann::json::string_t>();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue