fixed duplicate symbols errors on header-only version. issue #16

This commit is contained in:
mnpk 2015-02-05 11:58:05 +09:00
parent c4d74856bb
commit d2fa8f4ed0

View File

@ -599,12 +599,12 @@ namespace nlohmann
// CONSTRUCTORS OF UNION "value" // // CONSTRUCTORS OF UNION "value" //
/////////////////////////////////// ///////////////////////////////////
json::value::value(array_t* _array): array(_array) {} inline json::value::value(array_t* _array): array(_array) {}
json::value::value(object_t* object_): object(object_) {} inline json::value::value(object_t* object_): object(object_) {}
json::value::value(string_t* _string): string(_string) {} inline json::value::value(string_t* _string): string(_string) {}
json::value::value(boolean_t _boolean) : boolean(_boolean) {} inline json::value::value(boolean_t _boolean) : boolean(_boolean) {}
json::value::value(number_t _number) : number(_number) {} inline json::value::value(number_t _number) : number(_number) {}
json::value::value(number_float_t _number_float) : number_float(_number_float) {} inline json::value::value(number_float_t _number_float) : number_float(_number_float) {}
///////////////////////////////// /////////////////////////////////
@ -618,7 +618,7 @@ Construct an empty JSON given the type.
@post Memory for array, object, and string are allocated. @post Memory for array, object, and string are allocated.
*/ */
json::json(const value_t t) inline json::json(const value_t t)
: type_(t) : type_(t)
{ {
switch (type_) switch (type_)
@ -660,13 +660,13 @@ json::json(const value_t t)
} }
} }
json::json() noexcept : final_type_(0), type_(value_t::null) inline json::json() noexcept : final_type_(0), type_(value_t::null)
{} {}
/*! /*!
Construct a null JSON object. Construct a null JSON object.
*/ */
json::json(std::nullptr_t) noexcept : json() inline json::json(std::nullptr_t) noexcept : json()
{} {}
/*! /*!
@ -674,35 +674,35 @@ Construct a string JSON object.
@param s a string to initialize the JSON object with @param s a string to initialize the JSON object with
*/ */
json::json(const std::string& s) inline json::json(const std::string& s)
: final_type_(0), type_(value_t::string), value_(new string_t(s)) : final_type_(0), type_(value_t::string), value_(new string_t(s))
{} {}
json::json(std::string&& s) inline json::json(std::string&& s)
: final_type_(0), type_(value_t::string), value_(new string_t(std::move(s))) : final_type_(0), type_(value_t::string), value_(new string_t(std::move(s)))
{} {}
json::json(const char* s) inline json::json(const char* s)
: final_type_(0), type_(value_t::string), value_(new string_t(s)) : final_type_(0), type_(value_t::string), value_(new string_t(s))
{} {}
json::json(const bool b) noexcept inline json::json(const bool b) noexcept
: final_type_(0), type_(value_t::boolean), value_(b) : final_type_(0), type_(value_t::boolean), value_(b)
{} {}
json::json(const array_t& a) inline json::json(const array_t& a)
: final_type_(0), type_(value_t::array), value_(new array_t(a)) : final_type_(0), type_(value_t::array), value_(new array_t(a))
{} {}
json::json(array_t&& a) inline json::json(array_t&& a)
: final_type_(0), type_(value_t::array), value_(new array_t(std::move(a))) : final_type_(0), type_(value_t::array), value_(new array_t(std::move(a)))
{} {}
json::json(const object_t& o) inline json::json(const object_t& o)
: final_type_(0), type_(value_t::object), value_(new object_t(o)) : final_type_(0), type_(value_t::object), value_(new object_t(o))
{} {}
json::json(object_t&& o) inline json::json(object_t&& o)
: final_type_(0), type_(value_t::object), value_(new object_t(std::move(o))) : final_type_(0), type_(value_t::object), value_(new object_t(std::move(o)))
{} {}
@ -725,7 +725,7 @@ as is to create an array.
@param type_deduction whether the type (array/object) shall eb deducted @param type_deduction whether the type (array/object) shall eb deducted
@param manual_type if type deduction is switched of, pass a manual type @param manual_type if type deduction is switched of, pass a manual type
*/ */
json::json(list_init_t a, bool type_deduction, value_t manual_type) : final_type_(0) inline json::json(list_init_t a, bool type_deduction, value_t manual_type) : final_type_(0)
{ {
// the initializer list could describe an object // the initializer list could describe an object
bool is_object = true; bool is_object = true;
@ -785,7 +785,7 @@ json::json(list_init_t a, bool type_deduction, value_t manual_type) : final_type
@param a initializer list to create an array from @param a initializer list to create an array from
@return array @return array
*/ */
json json::array(list_init_t a) inline json json::array(list_init_t a)
{ {
return json(a, false, value_t::array); return json(a, false, value_t::array);
} }
@ -794,7 +794,7 @@ json json::array(list_init_t a)
@param a initializer list to create an object from @param a initializer list to create an object from
@return object @return object
*/ */
json json::object(list_init_t a) inline json json::object(list_init_t a)
{ {
// if more than one element is in the initializer list, wrap it // if more than one element is in the initializer list, wrap it
if (a.size() > 1) if (a.size() > 1)
@ -812,7 +812,7 @@ A copy constructor for the JSON class.
@param o the JSON object to copy @param o the JSON object to copy
*/ */
json::json(const json& o) inline json::json(const json& o)
: type_(o.type_) : type_(o.type_)
{ {
switch (type_) switch (type_)
@ -861,7 +861,7 @@ A move constructor for the JSON class.
@post The JSON object \p o is invalidated. @post The JSON object \p o is invalidated.
*/ */
json::json(json&& o) noexcept inline json::json(json&& o) noexcept
: type_(std::move(o.type_)), value_(std::move(o.value_)) : type_(std::move(o.type_)), value_(std::move(o.value_))
{ {
// invalidate payload // invalidate payload
@ -875,14 +875,14 @@ idiom.
@param o A JSON object to assign to this object. @param o A JSON object to assign to this object.
*/ */
json& json::operator=(json o) noexcept inline json& json::operator=(json o) noexcept
{ {
std::swap(type_, o.type_); std::swap(type_, o.type_);
std::swap(value_, o.value_); std::swap(value_, o.value_);
return *this; return *this;
} }
json::~json() noexcept inline json::~json() noexcept
{ {
switch (type_) switch (type_)
{ {
@ -913,7 +913,7 @@ json::~json() noexcept
@param s a string representation of a JSON object @param s a string representation of a JSON object
@return a JSON object @return a JSON object
*/ */
json json::parse(const std::string& s) inline json json::parse(const std::string& s)
{ {
return parser(s).parse(); return parser(s).parse();
} }
@ -922,13 +922,13 @@ json json::parse(const std::string& s)
@param s a string representation of a JSON object @param s a string representation of a JSON object
@return a JSON object @return a JSON object
*/ */
json json::parse(const char* s) inline json json::parse(const char* s)
{ {
return parser(s).parse(); return parser(s).parse();
} }
std::string json::type_name() const noexcept inline std::string json::type_name() const noexcept
{ {
switch (type_) switch (type_)
{ {
@ -969,7 +969,7 @@ std::string json::type_name() const noexcept
type is not string type is not string
*/ */
template<> template<>
std::string json::get() const inline std::string json::get() const
{ {
switch (type_) switch (type_)
{ {
@ -985,7 +985,7 @@ std::string json::get() const
type is not number (int or float) type is not number (int or float)
*/ */
template<> template<>
int json::get() const inline int json::get() const
{ {
switch (type_) switch (type_)
{ {
@ -1003,7 +1003,7 @@ int json::get() const
type is not number (int or float) type is not number (int or float)
*/ */
template<> template<>
int64_t json::get() const inline int64_t json::get() const
{ {
switch (type_) switch (type_)
{ {
@ -1021,7 +1021,7 @@ int64_t json::get() const
type is not number (int or float) type is not number (int or float)
*/ */
template<> template<>
double json::get() const inline double json::get() const
{ {
switch (type_) switch (type_)
{ {
@ -1039,7 +1039,7 @@ double json::get() const
type is not boolean type is not boolean
*/ */
template<> template<>
bool json::get() const inline bool json::get() const
{ {
switch (type_) switch (type_)
{ {
@ -1055,7 +1055,7 @@ bool json::get() const
type is an object type is an object
*/ */
template<> template<>
json::array_t json::get() const inline json::array_t json::get() const
{ {
if (type_ == value_t::array) if (type_ == value_t::array)
{ {
@ -1076,7 +1076,7 @@ json::array_t json::get() const
type is not object type is not object
*/ */
template<> template<>
json::object_t json::get() const inline json::object_t json::get() const
{ {
if (type_ == value_t::object) if (type_ == value_t::object)
{ {
@ -1088,37 +1088,37 @@ json::object_t json::get() const
} }
} }
json::operator std::string() const inline json::operator std::string() const
{ {
return get<std::string>(); return get<std::string>();
} }
json::operator int() const inline json::operator int() const
{ {
return get<int>(); return get<int>();
} }
json::operator int64_t() const inline json::operator int64_t() const
{ {
return get<int64_t>(); return get<int64_t>();
} }
json::operator double() const inline json::operator double() const
{ {
return get<double>(); return get<double>();
} }
json::operator bool() const inline json::operator bool() const
{ {
return get<bool>(); return get<bool>();
} }
json::operator array_t() const inline json::operator array_t() const
{ {
return get<array_t>(); return get<array_t>();
} }
json::operator object_t() const inline json::operator object_t() const
{ {
return get<object_t>(); return get<object_t>();
} }
@ -1130,7 +1130,7 @@ Internal implementation of the serialization function.
\param indentStep the indent level \param indentStep the indent level
\param currentIndent the current indent level (only used internally) \param currentIndent the current indent level (only used internally)
*/ */
std::string json::dump(const bool prettyPrint, const unsigned int indentStep, inline std::string json::dump(const bool prettyPrint, const unsigned int indentStep,
unsigned int currentIndent) const noexcept unsigned int currentIndent) const noexcept
{ {
// helper function to return whitespace as indentation // helper function to return whitespace as indentation
@ -1249,7 +1249,7 @@ with another string.
\param c the character that needs to be replaced \param c the character that needs to be replaced
\param replacement the string that is the replacement for the character \param replacement the string that is the replacement for the character
*/ */
void json::replaceChar(std::string& str, char c, const std::string& replacement) inline void json::replaceChar(std::string& str, char c, const std::string& replacement)
const const
{ {
size_t start_pos = 0; size_t start_pos = 0;
@ -1269,7 +1269,7 @@ can't be used as is when dumping a string value.
\return a copy of the given string with all special characters escaped. \return a copy of the given string with all special characters escaped.
*/ */
std::string json::escapeString(const std::string& str) const inline std::string json::escapeString(const std::string& str) const
{ {
std::string result(str); std::string result(str);
// we first need to escape the backslashes as all other methods will insert // we first need to escape the backslashes as all other methods will insert
@ -1296,7 +1296,7 @@ Serialization function for JSON objects. The function tries to mimick Python's
\see https://docs.python.org/2/library/json.html#json.dump \see https://docs.python.org/2/library/json.html#json.dump
*/ */
std::string json::dump(int indent) const noexcept inline std::string json::dump(int indent) const noexcept
{ {
if (indent >= 0) if (indent >= 0)
{ {
@ -1313,7 +1313,7 @@ std::string json::dump(int indent) const noexcept
// ADDING ELEMENTS TO OBJECTS AND ARRAYS // // ADDING ELEMENTS TO OBJECTS AND ARRAYS //
/////////////////////////////////////////// ///////////////////////////////////////////
json& json::operator+=(const json& o) inline json& json::operator+=(const json& o)
{ {
push_back(o); push_back(o);
return *this; return *this;
@ -1322,7 +1322,7 @@ json& json::operator+=(const json& o)
/*! /*!
@todo comment me @todo comment me
*/ */
json& json::operator+=(const object_t::value_type& p) inline json& json::operator+=(const object_t::value_type& p)
{ {
return operator[](p.first) = p.second; return operator[](p.first) = p.second;
} }
@ -1330,7 +1330,7 @@ json& json::operator+=(const object_t::value_type& p)
/*! /*!
@todo comment me @todo comment me
*/ */
json& json::operator+=(list_init_t a) inline json& json::operator+=(list_init_t a)
{ {
push_back(a); push_back(a);
return *this; return *this;
@ -1350,7 +1350,7 @@ an array, the passed element is added to the array.
@note Null objects are silently transformed into an array before the addition. @note Null objects are silently transformed into an array before the addition.
*/ */
void json::push_back(const json& o) inline void json::push_back(const json& o)
{ {
// push_back only works for null objects or arrays // push_back only works for null objects or arrays
if (not(type_ == value_t::null or type_ == value_t::array)) if (not(type_ == value_t::null or type_ == value_t::array))
@ -1385,7 +1385,7 @@ an array, the passed element is added to the array using move semantics.
@note Null objects are silently transformed into an array before the addition. @note Null objects are silently transformed into an array before the addition.
@note This function applies move semantics for the given element. @note This function applies move semantics for the given element.
*/ */
void json::push_back(json&& o) inline void json::push_back(json&& o)
{ {
// push_back only works for null objects or arrays // push_back only works for null objects or arrays
if (not(type_ == value_t::null or type_ == value_t::array)) if (not(type_ == value_t::null or type_ == value_t::array))
@ -1409,7 +1409,7 @@ void json::push_back(json&& o)
/*! /*!
@todo comment me @todo comment me
*/ */
void json::push_back(const object_t::value_type& p) inline void json::push_back(const object_t::value_type& p)
{ {
operator[](p.first) = p.second; operator[](p.first) = p.second;
} }
@ -1417,7 +1417,7 @@ void json::push_back(const object_t::value_type& p)
/*! /*!
@todo comment me @todo comment me
*/ */
void json::push_back(list_init_t a) inline void json::push_back(list_init_t a)
{ {
bool is_array = false; bool is_array = false;
@ -1468,7 +1468,7 @@ index. Bounds will not be checked.
@pre Object is an array. @pre Object is an array.
@exception std::domain_error if object is not an array @exception std::domain_error if object is not an array
*/ */
json::reference json::operator[](const int index) inline json::reference json::operator[](const int index)
{ {
// this [] operator only works for arrays // this [] operator only works for arrays
if (type_ != value_t::array) if (type_ != value_t::array)
@ -1497,7 +1497,7 @@ index. Bounds will not be checked.
@pre Object is an array. @pre Object is an array.
@exception std::domain_error if object is not an array @exception std::domain_error if object is not an array
*/ */
json::const_reference json::operator[](const int index) const inline json::const_reference json::operator[](const int index) const
{ {
// this [] operator only works for arrays // this [] operator only works for arrays
if (type_ != value_t::array) if (type_ != value_t::array)
@ -1527,7 +1527,7 @@ index. Bounds will be checked.
@exception std::domain_error if object is not an array @exception std::domain_error if object is not an array
@exception std::out_of_range if index is out of range (via std::vector::at) @exception std::out_of_range if index is out of range (via std::vector::at)
*/ */
json::reference json::at(const int index) inline json::reference json::at(const int index)
{ {
// this function only works for arrays // this function only works for arrays
if (type_ != value_t::array) if (type_ != value_t::array)
@ -1557,7 +1557,7 @@ index. Bounds will be checked.
@exception std::domain_error if object is not an array @exception std::domain_error if object is not an array
@exception std::out_of_range if index is out of range (via std::vector::at) @exception std::out_of_range if index is out of range (via std::vector::at)
*/ */
json::const_reference json::at(const int index) const inline json::const_reference json::at(const int index) const
{ {
// this function only works for arrays // this function only works for arrays
if (type_ != value_t::array) if (type_ != value_t::array)
@ -1573,7 +1573,7 @@ json::const_reference json::at(const int index) const
/*! /*!
@copydoc json::operator[](const char* key) @copydoc json::operator[](const char* key)
*/ */
json::reference json::operator[](const std::string& key) inline json::reference json::operator[](const std::string& key)
{ {
return operator[](key.c_str()); return operator[](key.c_str());
} }
@ -1591,7 +1591,7 @@ key.
@exception std::domain_error if object is not an object (or null) @exception std::domain_error if object is not an object (or null)
*/ */
json::reference json::operator[](const char* key) inline json::reference json::operator[](const char* key)
{ {
// implicitly convert null to object // implicitly convert null to object
if (type_ == value_t::null) if (type_ == value_t::null)
@ -1620,7 +1620,7 @@ json::reference json::operator[](const char* key)
/*! /*!
@copydoc json::operator[](const char* key) @copydoc json::operator[](const char* key)
*/ */
json::const_reference json::operator[](const std::string& key) const inline json::const_reference json::operator[](const std::string& key) const
{ {
return operator[](key.c_str()); return operator[](key.c_str());
} }
@ -1636,7 +1636,7 @@ key.
@exception std::domain_error if object is not an object @exception std::domain_error if object is not an object
@exception std::out_of_range if key is not found in object @exception std::out_of_range if key is not found in object
*/ */
json::const_reference json::operator[](const char* key) const inline json::const_reference json::operator[](const char* key) const
{ {
// this [] operator only works for objects // this [] operator only works for objects
if (type_ != value_t::object) if (type_ != value_t::object)
@ -1661,7 +1661,7 @@ json::const_reference json::operator[](const char* key) const
/*! /*!
@copydoc json::at(const char* key) @copydoc json::at(const char* key)
*/ */
json::reference json::at(const std::string& key) inline json::reference json::at(const std::string& key)
{ {
return at(key.c_str()); return at(key.c_str());
} }
@ -1679,7 +1679,7 @@ key.
@exception std::domain_error if object is not an object @exception std::domain_error if object is not an object
@exception std::out_of_range if key was not found (via std::map::at) @exception std::out_of_range if key was not found (via std::map::at)
*/ */
json::reference json::at(const char* key) inline json::reference json::at(const char* key)
{ {
// this function operator only works for objects // this function operator only works for objects
if (type_ != value_t::object) if (type_ != value_t::object)
@ -1695,7 +1695,7 @@ json::reference json::at(const char* key)
/*! /*!
@copydoc json::at(const char *key) const @copydoc json::at(const char *key) const
*/ */
json::const_reference json::at(const std::string& key) const inline json::const_reference json::at(const std::string& key) const
{ {
return at(key.c_str()); return at(key.c_str());
} }
@ -1711,7 +1711,7 @@ key.
@exception std::domain_error if object is not an object @exception std::domain_error if object is not an object
@exception std::out_of_range if key is not found (via std::map::at) @exception std::out_of_range if key is not found (via std::map::at)
*/ */
json::const_reference json::at(const char* key) const inline json::const_reference json::at(const char* key) const
{ {
// this [] operator only works for objects // this [] operator only works for objects
if (type_ != value_t::object) if (type_ != value_t::object)
@ -1733,7 +1733,7 @@ Returns the size of the JSON object.
@invariant The size is reported as 0 if and only if empty() would return true. @invariant The size is reported as 0 if and only if empty() would return true.
*/ */
json::size_type json::size() const noexcept inline json::size_type json::size() const noexcept
{ {
switch (type_) switch (type_)
{ {
@ -1763,7 +1763,7 @@ Returns the maximal size of the JSON object.
number of elements in compounds (array and object), 1 for value types number of elements in compounds (array and object), 1 for value types
(true, false, number, string), and 0 for null. (true, false, number, string), and 0 for null.
*/ */
json::size_type json::max_size() const noexcept inline json::size_type json::max_size() const noexcept
{ {
switch (type_) switch (type_)
{ {
@ -1795,7 +1795,7 @@ Returns whether a JSON object is empty.
@invariant Empty would report true if and only if size() would return 0. @invariant Empty would report true if and only if size() would return 0.
*/ */
bool json::empty() const noexcept inline bool json::empty() const noexcept
{ {
switch (type_) switch (type_)
{ {
@ -1825,7 +1825,7 @@ Removes all elements from compounds and resets values to default.
for compounds, false for booleans, 0 for integer numbers, and 0.0 for compounds, false for booleans, 0 for integer numbers, and 0.0
for floating numbers. for floating numbers.
*/ */
void json::clear() noexcept inline void json::clear() noexcept
{ {
switch (type_) switch (type_)
{ {
@ -1866,28 +1866,28 @@ void json::clear() noexcept
} }
} }
void json::swap(json& o) noexcept inline void json::swap(json& o) noexcept
{ {
std::swap(type_, o.type_); std::swap(type_, o.type_);
std::swap(value_, o.value_); std::swap(value_, o.value_);
} }
json::value_t json::type() const noexcept inline json::value_t json::type() const noexcept
{ {
return type_; return type_;
} }
json::iterator json::find(const std::string& key) inline json::iterator json::find(const std::string& key)
{ {
return find(key.c_str()); return find(key.c_str());
} }
json::const_iterator json::find(const std::string& key) const inline json::const_iterator json::find(const std::string& key) const
{ {
return find(key.c_str()); return find(key.c_str());
} }
json::iterator json::find(const char* key) inline json::iterator json::find(const char* key)
{ {
auto result = end(); auto result = end();
@ -1901,7 +1901,7 @@ json::iterator json::find(const char* key)
return result; return result;
} }
json::const_iterator json::find(const char* key) const inline json::const_iterator json::find(const char* key) const
{ {
auto result = cend(); auto result = cend();
@ -1915,7 +1915,7 @@ json::const_iterator json::find(const char* key) const
return result; return result;
} }
bool json::operator==(const json& o) const noexcept inline bool json::operator==(const json& o) const noexcept
{ {
switch (type_) switch (type_)
{ {
@ -1988,64 +1988,64 @@ bool json::operator==(const json& o) const noexcept
return false; return false;
} }
bool json::operator!=(const json& o) const noexcept inline bool json::operator!=(const json& o) const noexcept
{ {
return not operator==(o); return not operator==(o);
} }
json::iterator json::begin() noexcept inline json::iterator json::begin() noexcept
{ {
return json::iterator(this, true); return json::iterator(this, true);
} }
json::iterator json::end() noexcept inline json::iterator json::end() noexcept
{ {
return json::iterator(this, false); return json::iterator(this, false);
} }
json::const_iterator json::begin() const noexcept inline json::const_iterator json::begin() const noexcept
{ {
return json::const_iterator(this, true); return json::const_iterator(this, true);
} }
json::const_iterator json::end() const noexcept inline json::const_iterator json::end() const noexcept
{ {
return json::const_iterator(this, false); return json::const_iterator(this, false);
} }
json::const_iterator json::cbegin() const noexcept inline json::const_iterator json::cbegin() const noexcept
{ {
return json::const_iterator(this, true); return json::const_iterator(this, true);
} }
json::const_iterator json::cend() const noexcept inline json::const_iterator json::cend() const noexcept
{ {
return json::const_iterator(this, false); return json::const_iterator(this, false);
} }
json::reverse_iterator json::rbegin() noexcept inline json::reverse_iterator json::rbegin() noexcept
{ {
return reverse_iterator(end()); return reverse_iterator(end());
} }
json::reverse_iterator json::rend() noexcept inline json::reverse_iterator json::rend() noexcept
{ {
return reverse_iterator(begin()); return reverse_iterator(begin());
} }
json::const_reverse_iterator json::crbegin() const noexcept inline json::const_reverse_iterator json::crbegin() const noexcept
{ {
return const_reverse_iterator(cend()); return const_reverse_iterator(cend());
} }
json::const_reverse_iterator json::crend() const noexcept inline json::const_reverse_iterator json::crend() const noexcept
{ {
return const_reverse_iterator(cbegin()); return const_reverse_iterator(cbegin());
} }
json::iterator::iterator(json* j, bool begin) inline json::iterator::iterator(json* j, bool begin)
: object_(j), invalid(not begin or j == nullptr) : object_(j), invalid(not begin or j == nullptr)
{ {
if (object_ != nullptr) if (object_ != nullptr)
@ -2077,7 +2077,7 @@ json::iterator::iterator(json* j, bool begin)
} }
} }
json::iterator::iterator(const json::iterator& o) inline json::iterator::iterator(const json::iterator& o)
: object_(o.object_), invalid(o.invalid) : object_(o.object_), invalid(o.invalid)
{ {
if (o.vi_ != nullptr) if (o.vi_ != nullptr)
@ -2091,13 +2091,13 @@ json::iterator::iterator(const json::iterator& o)
} }
} }
json::iterator::~iterator() inline json::iterator::~iterator()
{ {
delete vi_; delete vi_;
delete oi_; delete oi_;
} }
json::iterator& json::iterator::operator=(json::iterator o) inline json::iterator& json::iterator::operator=(json::iterator o)
{ {
std::swap(object_, o.object_); std::swap(object_, o.object_);
std::swap(vi_, o.vi_); std::swap(vi_, o.vi_);
@ -2106,7 +2106,7 @@ json::iterator& json::iterator::operator=(json::iterator o)
return *this; return *this;
} }
bool json::iterator::operator==(const json::iterator& o) const inline bool json::iterator::operator==(const json::iterator& o) const
{ {
if (object_ != nullptr and o.object_ != nullptr) if (object_ != nullptr and o.object_ != nullptr)
{ {
@ -2127,12 +2127,12 @@ bool json::iterator::operator==(const json::iterator& o) const
return false; return false;
} }
bool json::iterator::operator!=(const json::iterator& o) const inline bool json::iterator::operator!=(const json::iterator& o) const
{ {
return not operator==(o); return not operator==(o);
} }
json::iterator& json::iterator::operator++() inline json::iterator& json::iterator::operator++()
{ {
if (object_ != nullptr) if (object_ != nullptr)
{ {
@ -2161,7 +2161,7 @@ json::iterator& json::iterator::operator++()
return *this; return *this;
} }
json::iterator& json::iterator::operator--() inline json::iterator& json::iterator::operator--()
{ {
if (object_ != nullptr) if (object_ != nullptr)
{ {
@ -2190,7 +2190,7 @@ json::iterator& json::iterator::operator--()
return *this; return *this;
} }
json& json::iterator::operator*() const inline json& json::iterator::operator*() const
{ {
if (object_ == nullptr or invalid) if (object_ == nullptr or invalid)
{ {
@ -2214,7 +2214,7 @@ json& json::iterator::operator*() const
} }
} }
json* json::iterator::operator->() const inline json* json::iterator::operator->() const
{ {
if (object_ == nullptr or invalid) if (object_ == nullptr or invalid)
{ {
@ -2238,7 +2238,7 @@ json* json::iterator::operator->() const
} }
} }
std::string json::iterator::key() const inline std::string json::iterator::key() const
{ {
if (object_ == nullptr or invalid or object_->type_ != json::value_t::object) if (object_ == nullptr or invalid or object_->type_ != json::value_t::object)
{ {
@ -2248,7 +2248,7 @@ std::string json::iterator::key() const
return (*oi_)->first; return (*oi_)->first;
} }
json& json::iterator::value() const inline json& json::iterator::value() const
{ {
if (object_ == nullptr or invalid) if (object_ == nullptr or invalid)
{ {
@ -2273,7 +2273,7 @@ json& json::iterator::value() const
} }
json::const_iterator::const_iterator(const json* j, bool begin) inline json::const_iterator::const_iterator(const json* j, bool begin)
: object_(j), invalid(not begin or j == nullptr) : object_(j), invalid(not begin or j == nullptr)
{ {
if (object_ != nullptr) if (object_ != nullptr)
@ -2305,7 +2305,7 @@ json::const_iterator::const_iterator(const json* j, bool begin)
} }
} }
json::const_iterator::const_iterator(const json::const_iterator& o) inline json::const_iterator::const_iterator(const json::const_iterator& o)
: object_(o.object_), invalid(o.invalid) : object_(o.object_), invalid(o.invalid)
{ {
if (o.vi_ != nullptr) if (o.vi_ != nullptr)
@ -2318,7 +2318,7 @@ json::const_iterator::const_iterator(const json::const_iterator& o)
} }
} }
json::const_iterator::const_iterator(const json::iterator& o) inline json::const_iterator::const_iterator(const json::iterator& o)
: object_(o.object_), invalid(o.invalid) : object_(o.object_), invalid(o.invalid)
{ {
if (o.vi_ != nullptr) if (o.vi_ != nullptr)
@ -2331,13 +2331,13 @@ json::const_iterator::const_iterator(const json::iterator& o)
} }
} }
json::const_iterator::~const_iterator() inline json::const_iterator::~const_iterator()
{ {
delete vi_; delete vi_;
delete oi_; delete oi_;
} }
json::const_iterator& json::const_iterator::operator=(json::const_iterator o) inline json::const_iterator& json::const_iterator::operator=(json::const_iterator o)
{ {
std::swap(object_, o.object_); std::swap(object_, o.object_);
std::swap(vi_, o.vi_); std::swap(vi_, o.vi_);
@ -2346,7 +2346,7 @@ json::const_iterator& json::const_iterator::operator=(json::const_iterator o)
return *this; return *this;
} }
bool json::const_iterator::operator==(const json::const_iterator& o) const inline bool json::const_iterator::operator==(const json::const_iterator& o) const
{ {
if (object_ != nullptr and o.object_ != nullptr) if (object_ != nullptr and o.object_ != nullptr)
{ {
@ -2367,12 +2367,12 @@ bool json::const_iterator::operator==(const json::const_iterator& o) const
return false; return false;
} }
bool json::const_iterator::operator!=(const json::const_iterator& o) const inline bool json::const_iterator::operator!=(const json::const_iterator& o) const
{ {
return not operator==(o); return not operator==(o);
} }
json::const_iterator& json::const_iterator::operator++() inline json::const_iterator& json::const_iterator::operator++()
{ {
if (object_ != nullptr) if (object_ != nullptr)
{ {
@ -2401,7 +2401,7 @@ json::const_iterator& json::const_iterator::operator++()
return *this; return *this;
} }
json::const_iterator& json::const_iterator::operator--() inline json::const_iterator& json::const_iterator::operator--()
{ {
if (object_ != nullptr) if (object_ != nullptr)
{ {
@ -2430,7 +2430,7 @@ json::const_iterator& json::const_iterator::operator--()
return *this; return *this;
} }
const json& json::const_iterator::operator*() const inline const json& json::const_iterator::operator*() const
{ {
if (object_ == nullptr or invalid) if (object_ == nullptr or invalid)
{ {
@ -2454,7 +2454,7 @@ const json& json::const_iterator::operator*() const
} }
} }
const json* json::const_iterator::operator->() const inline const json* json::const_iterator::operator->() const
{ {
if (object_ == nullptr or invalid) if (object_ == nullptr or invalid)
{ {
@ -2478,7 +2478,7 @@ const json* json::const_iterator::operator->() const
} }
} }
std::string json::const_iterator::key() const inline std::string json::const_iterator::key() const
{ {
if (object_ == nullptr or invalid or object_->type_ != json::value_t::object) if (object_ == nullptr or invalid or object_->type_ != json::value_t::object)
{ {
@ -2488,7 +2488,7 @@ std::string json::const_iterator::key() const
return (*oi_)->first; return (*oi_)->first;
} }
const json& json::const_iterator::value() const inline const json& json::const_iterator::value() const
{ {
if (object_ == nullptr or invalid) if (object_ == nullptr or invalid)
{ {
@ -2523,7 +2523,7 @@ Initialize the JSON parser given a string \p s.
@post \p s is copied to the buffer @ref buffer_ and the first character is @post \p s is copied to the buffer @ref buffer_ and the first character is
read. Whitespace is skipped. read. Whitespace is skipped.
*/ */
json::parser::parser(const char* s) inline json::parser::parser(const char* s)
: buffer_(s) : buffer_(s)
{ {
// read first character // read first character
@ -2533,7 +2533,7 @@ json::parser::parser(const char* s)
/*! /*!
@copydoc json::parser::parser(const char* s) @copydoc json::parser::parser(const char* s)
*/ */
json::parser::parser(const std::string& s) inline json::parser::parser(const std::string& s)
: buffer_(s) : buffer_(s)
{ {
// read first character // read first character
@ -2551,7 +2551,7 @@ Initialize the JSON parser given an input stream \p _is.
read. Whitespace is skipped. read. Whitespace is skipped.
*/ */
json::parser::parser(std::istream& _is) inline json::parser::parser(std::istream& _is)
{ {
while (_is) while (_is)
{ {
@ -2564,7 +2564,7 @@ json::parser::parser(std::istream& _is)
next(); next();
} }
json json::parser::parse() inline json json::parser::parse()
{ {
switch (current_) switch (current_)
{ {
@ -2704,7 +2704,7 @@ true. If the end of the buffer is reached, false is returned.
@post current_ holds the next character @post current_ holds the next character
*/ */
bool json::parser::next() inline bool json::parser::next()
{ {
if (pos_ == buffer_.size()) if (pos_ == buffer_.size())
{ {
@ -2738,7 +2738,7 @@ the error message \p msg), and the last read token.
@exception std::invalid_argument whenever the function is called @exception std::invalid_argument whenever the function is called
*/ */
void json::parser::error(const std::string& msg) const inline void json::parser::error(const std::string& msg) const
{ {
throw std::invalid_argument("parse error at position " + throw std::invalid_argument("parse error at position " +
std::to_string(pos_) + ": " + msg + std::to_string(pos_) + ": " + msg +
@ -2759,7 +2759,7 @@ Parses a string after opening quotes (\p ") where read.
@todo Unicode escapes such as \uxxxx are missing - see @todo Unicode escapes such as \uxxxx are missing - see
https://github.com/nlohmann/json/issues/12 https://github.com/nlohmann/json/issues/12
*/ */
std::string json::parser::parseString() inline std::string json::parser::parseString()
{ {
// true if and only if the amount of backslashes before the current // true if and only if the amount of backslashes before the current
// character is even // character is even
@ -2892,7 +2892,7 @@ You should only pass numbers < 0x10ffff into this function
@return the UTF-8 representation of the given code point @return the UTF-8 representation of the given code point
*/ */
std::string json::parser::codePointToUTF8(unsigned int codePoint) const inline std::string json::parser::codePointToUTF8(unsigned int codePoint) const
{ {
// this method contains a lot of bit manipulations to // this method contains a lot of bit manipulations to
// build the bytes for UTF-8. // build the bytes for UTF-8.
@ -2961,7 +2961,7 @@ Parses 4 hexadecimal characters as a number.
@post pos_ is pointing to the character after the 4 hexadecimal characters. @post pos_ is pointing to the character after the 4 hexadecimal characters.
*/ */
unsigned int json::parser::parse4HexCodePoint() inline unsigned int json::parser::parse4HexCodePoint()
{ {
const auto startPos = pos_; const auto startPos = pos_;
@ -3016,7 +3016,7 @@ surrogate is YYYY.
@post pos_ is pointing at the character behind the last X (or Y in form 2). @post pos_ is pointing at the character behind the last X (or Y in form 2).
*/ */
std::string json::parser::parseUnicodeEscape() inline std::string json::parser::parseUnicodeEscape()
{ {
// jump to the first hex value // jump to the first hex value
pos_++; pos_++;
@ -3074,7 +3074,7 @@ error is raised via @ref error.
@post The character after the \p "true" is the current character. Whitespace is @post The character after the \p "true" is the current character. Whitespace is
skipped. skipped.
*/ */
void json::parser::parseTrue() inline void json::parser::parseTrue()
{ {
if (buffer_.substr(pos_, 3) != "rue") if (buffer_.substr(pos_, 3) != "rue")
{ {
@ -3097,7 +3097,7 @@ error is raised via @ref error.
@post The character after the \p "false" is the current character. Whitespace @post The character after the \p "false" is the current character. Whitespace
is skipped. is skipped.
*/ */
void json::parser::parseFalse() inline void json::parser::parseFalse()
{ {
if (buffer_.substr(pos_, 4) != "alse") if (buffer_.substr(pos_, 4) != "alse")
{ {
@ -3120,7 +3120,7 @@ error is raised via @ref error.
@post The character after the \p "null" is the current character. Whitespace is @post The character after the \p "null" is the current character. Whitespace is
skipped. skipped.
*/ */
void json::parser::parseNull() inline void json::parser::parseNull()
{ {
if (buffer_.substr(pos_, 3) != "ull") if (buffer_.substr(pos_, 3) != "ull")
{ {
@ -3143,7 +3143,7 @@ via @ref error.
@post The next chatacter is read. Whitespace is skipped. @post The next chatacter is read. Whitespace is skipped.
*/ */
void json::parser::expect(const char c) inline void json::parser::expect(const char c)
{ {
if (current_ != c) if (current_ != c)
{ {
@ -3168,7 +3168,7 @@ no parse error occurred.
@param s a string representation of a JSON object @param s a string representation of a JSON object
@return a JSON object @return a JSON object
*/ */
nlohmann::json operator "" _json(const char* s, std::size_t) inline nlohmann::json operator "" _json(const char* s, std::size_t)
{ {
return nlohmann::json::parse(s); return nlohmann::json::parse(s);
} }