mirror of
https://github.com/open-source-parsers/jsoncpp.git
synced 2025-10-15 15:16:47 +02:00
Compare commits
56 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d8cd848ede | ||
![]() |
92259f7147 | ||
![]() |
4a431bcdac | ||
![]() |
7d868636de | ||
![]() |
ab0f1e234a | ||
![]() |
45a560a8c0 | ||
![]() |
4893a8f667 | ||
![]() |
f6d785fda8 | ||
![]() |
8d54e333ff | ||
![]() |
b063cf4ada | ||
![]() |
c4ab6d733f | ||
![]() |
2f97c0147b | ||
![]() |
52cfe5ae88 | ||
![]() |
a304d61a7b | ||
![]() |
0a97e38ea5 | ||
![]() |
894e78bff1 | ||
![]() |
126bdc2b05 | ||
![]() |
094a7d8564 | ||
![]() |
b9afdf190d | ||
![]() |
80a82ea269 | ||
![]() |
f78f685bab | ||
![]() |
7d8eddb98c | ||
![]() |
7e0571b444 | ||
![]() |
b14c8c1423 | ||
![]() |
b299d3581f | ||
![]() |
48d2a69d47 | ||
![]() |
772e257fc9 | ||
![]() |
101fcf0806 | ||
![]() |
7e4df50d17 | ||
![]() |
318f30357c | ||
![]() |
0f288aecdd | ||
![]() |
e0f9aab0bf | ||
![]() |
43203f1d09 | ||
![]() |
55176b2bdd | ||
![]() |
4356d9bba1 | ||
![]() |
ea4af18317 | ||
![]() |
b999616df8 | ||
![]() |
660307d357 | ||
![]() |
911e2b0fea | ||
![]() |
d4a49cf511 | ||
![]() |
8bd4f943da | ||
![]() |
4018422a05 | ||
![]() |
ba6fa48d31 | ||
![]() |
17fc9b1a80 | ||
![]() |
6f22b0e076 | ||
![]() |
980cdf0fb5 | ||
![]() |
45da594e71 | ||
![]() |
c8a7b445ea | ||
![]() |
c8054483f8 | ||
![]() |
96d32b37ea | ||
![]() |
ef2ff8754a | ||
![]() |
b58c844579 | ||
![]() |
b803b92d11 | ||
![]() |
98e981dff9 | ||
![]() |
1c47796479 | ||
![]() |
12c67e810d |
@@ -22,16 +22,21 @@ IF(NOT WIN32)
|
|||||||
ENDIF()
|
ENDIF()
|
||||||
ENDIF()
|
ENDIF()
|
||||||
|
|
||||||
|
# Enable runtime search path support for dynamic libraries on OSX
|
||||||
|
IF(APPLE)
|
||||||
|
SET(CMAKE_MACOSX_RPATH 1)
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build")
|
SET(DEBUG_LIBNAME_SUFFIX "" CACHE STRING "Optional suffix to append to the library name for a debug build")
|
||||||
SET(LIB_SUFFIX "" CACHE STRING "Optional arch-dependent suffix for the library installation directory")
|
SET(LIB_SUFFIX "" CACHE STRING "Optional arch-dependent suffix for the library installation directory")
|
||||||
|
|
||||||
SET(RUNTIME_INSTALL_DIR bin
|
SET(RUNTIME_INSTALL_DIR bin
|
||||||
CACHE PATH "Install dir for executables and dlls")
|
CACHE PATH "Install dir for executables and dlls")
|
||||||
SET(ARCHIVE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}
|
SET(ARCHIVE_INSTALL_DIR lib${LIB_SUFFIX}
|
||||||
CACHE PATH "Install dir for static libraries")
|
CACHE PATH "Install dir for static libraries")
|
||||||
SET(LIBRARY_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}
|
SET(LIBRARY_INSTALL_DIR lib${LIB_SUFFIX}
|
||||||
CACHE PATH "Install dir for shared libraries")
|
CACHE PATH "Install dir for shared libraries")
|
||||||
SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include
|
SET(INCLUDE_INSTALL_DIR include
|
||||||
CACHE PATH "Install dir for headers")
|
CACHE PATH "Install dir for headers")
|
||||||
SET(PACKAGE_INSTALL_DIR lib${LIB_SUFFIX}/cmake
|
SET(PACKAGE_INSTALL_DIR lib${LIB_SUFFIX}/cmake
|
||||||
CACHE PATH "Install dir for cmake package config files")
|
CACHE PATH "Install dir for cmake package config files")
|
||||||
@@ -64,11 +69,12 @@ ENDMACRO()
|
|||||||
#SET( JSONCPP_VERSION_MAJOR X )
|
#SET( JSONCPP_VERSION_MAJOR X )
|
||||||
#SET( JSONCPP_VERSION_MINOR Y )
|
#SET( JSONCPP_VERSION_MINOR Y )
|
||||||
#SET( JSONCPP_VERSION_PATCH Z )
|
#SET( JSONCPP_VERSION_PATCH Z )
|
||||||
SET( JSONCPP_VERSION 1.7.0 )
|
SET( JSONCPP_VERSION 1.7.7 )
|
||||||
jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION )
|
jsoncpp_parse_version( ${JSONCPP_VERSION} JSONCPP_VERSION )
|
||||||
#IF(NOT JSONCPP_VERSION_FOUND)
|
#IF(NOT JSONCPP_VERSION_FOUND)
|
||||||
# MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z")
|
# MESSAGE(FATAL_ERROR "Failed to parse version string properly. Expect X.Y.Z")
|
||||||
#ENDIF(NOT JSONCPP_VERSION_FOUND)
|
#ENDIF(NOT JSONCPP_VERSION_FOUND)
|
||||||
|
SET( JSONCPP_SOVERSION 11 )
|
||||||
SET( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" )
|
SET( JSONCPP_USE_SECURE_MEMORY "0" CACHE STRING "-D...=1 to use memory-wiping allocator for STL" )
|
||||||
|
|
||||||
MESSAGE(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}")
|
MESSAGE(STATUS "JsonCpp Version: ${JSONCPP_VERSION_MAJOR}.${JSONCPP_VERSION_MINOR}.${JSONCPP_VERSION_PATCH}")
|
||||||
@@ -107,9 +113,16 @@ if (CMAKE_CXX_COMPILER_ID MATCHES "Clang")
|
|||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Werror=conversion -Werror=sign-compare")
|
||||||
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
# using GCC
|
# using GCC
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra -Werror=conversion")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra")
|
||||||
# not yet ready for -Wsign-conversion
|
# not yet ready for -Wsign-conversion
|
||||||
|
|
||||||
|
if (JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Werror=conversion -pedantic")
|
||||||
|
endif ()
|
||||||
|
elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel")
|
||||||
|
# using Intel compiler
|
||||||
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wall -Wconversion -Wshadow -Wextra -Werror=conversion")
|
||||||
|
|
||||||
if (JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
|
if (JSONCPP_WITH_STRICT_ISO AND NOT JSONCPP_WITH_WARNING_AS_ERROR)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic")
|
||||||
endif ()
|
endif ()
|
||||||
|
@@ -67,7 +67,7 @@ def amalgamate_source(source_top_dir=None,
|
|||||||
header.add_text("/// to prevent private header inclusion.")
|
header.add_text("/// to prevent private header inclusion.")
|
||||||
header.add_text("#define JSON_IS_AMALGAMATION")
|
header.add_text("#define JSON_IS_AMALGAMATION")
|
||||||
header.add_file("include/json/version.h")
|
header.add_file("include/json/version.h")
|
||||||
header.add_file("include/json/allocator.h")
|
#header.add_file("include/json/allocator.h") # Not available here.
|
||||||
header.add_file("include/json/config.h")
|
header.add_file("include/json/config.h")
|
||||||
header.add_file("include/json/forwards.h")
|
header.add_file("include/json/forwards.h")
|
||||||
header.add_file("include/json/features.h")
|
header.add_file("include/json/features.h")
|
||||||
|
@@ -6,7 +6,8 @@
|
|||||||
#ifndef JSON_CONFIG_H_INCLUDED
|
#ifndef JSON_CONFIG_H_INCLUDED
|
||||||
#define JSON_CONFIG_H_INCLUDED
|
#define JSON_CONFIG_H_INCLUDED
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
#include <string> //typdef String
|
#include <string> //typedef String
|
||||||
|
#include <stdint.h> //typedef int64_t, uint64_t
|
||||||
|
|
||||||
/// If defined, indicates that json library is embedded in CppTL library.
|
/// If defined, indicates that json library is embedded in CppTL library.
|
||||||
//# define JSON_IN_CPPTL 1
|
//# define JSON_IN_CPPTL 1
|
||||||
@@ -77,6 +78,16 @@
|
|||||||
|
|
||||||
#endif // defined(_MSC_VER)
|
#endif // defined(_MSC_VER)
|
||||||
|
|
||||||
|
// In c++11 the override keyword allows you to explicity define that a function
|
||||||
|
// is intended to override the base-class version. This makes the code more
|
||||||
|
// managable and fixes a set of common hard-to-find bugs.
|
||||||
|
#if __cplusplus >= 201103L
|
||||||
|
# define JSONCPP_OVERRIDE override
|
||||||
|
#elif defined(_MSC_VER) && _MSC_VER > 1600
|
||||||
|
# define JSONCPP_OVERRIDE override
|
||||||
|
#else
|
||||||
|
# define JSONCPP_OVERRIDE
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifndef JSON_HAS_RVALUE_REFERENCES
|
#ifndef JSON_HAS_RVALUE_REFERENCES
|
||||||
|
|
||||||
@@ -119,11 +130,15 @@
|
|||||||
# define JSON_USE_INT64_DOUBLE_CONVERSION 1
|
# define JSON_USE_INT64_DOUBLE_CONVERSION 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "version.h"
|
#if !defined(JSON_IS_AMALGAMATION)
|
||||||
|
|
||||||
#if JSONCPP_USING_SECURE_MEMORY
|
# include "version.h"
|
||||||
#include "allocator.h" //typedef Allocator
|
|
||||||
#endif
|
# if JSONCPP_USING_SECURE_MEMORY
|
||||||
|
# include "allocator.h" //typedef Allocator
|
||||||
|
# endif
|
||||||
|
|
||||||
|
#endif // if !defined(JSON_IS_AMALGAMATION)
|
||||||
|
|
||||||
namespace Json {
|
namespace Json {
|
||||||
typedef int Int;
|
typedef int Int;
|
||||||
@@ -138,8 +153,8 @@ typedef unsigned int LargestUInt;
|
|||||||
typedef __int64 Int64;
|
typedef __int64 Int64;
|
||||||
typedef unsigned __int64 UInt64;
|
typedef unsigned __int64 UInt64;
|
||||||
#else // if defined(_MSC_VER) // Other platforms, use long long
|
#else // if defined(_MSC_VER) // Other platforms, use long long
|
||||||
typedef long long int Int64;
|
typedef int64_t Int64;
|
||||||
typedef unsigned long long int UInt64;
|
typedef uint64_t UInt64;
|
||||||
#endif // if defined(_MSC_VER)
|
#endif // if defined(_MSC_VER)
|
||||||
typedef Int64 LargestInt;
|
typedef Int64 LargestInt;
|
||||||
typedef UInt64 LargestUInt;
|
typedef UInt64 LargestUInt;
|
||||||
|
@@ -333,9 +333,9 @@ public:
|
|||||||
Json::Value settings_;
|
Json::Value settings_;
|
||||||
|
|
||||||
CharReaderBuilder();
|
CharReaderBuilder();
|
||||||
~CharReaderBuilder() override;
|
~CharReaderBuilder() JSONCPP_OVERRIDE;
|
||||||
|
|
||||||
CharReader* newCharReader() const override;
|
CharReader* newCharReader() const JSONCPP_OVERRIDE;
|
||||||
|
|
||||||
/** \return true if 'settings' are legal and consistent;
|
/** \return true if 'settings' are legal and consistent;
|
||||||
* otherwise, indicate bad settings via 'invalid'.
|
* otherwise, indicate bad settings via 'invalid'.
|
||||||
|
@@ -53,8 +53,8 @@ namespace Json {
|
|||||||
class JSON_API Exception : public std::exception {
|
class JSON_API Exception : public std::exception {
|
||||||
public:
|
public:
|
||||||
Exception(JSONCPP_STRING const& msg);
|
Exception(JSONCPP_STRING const& msg);
|
||||||
~Exception() throw() override;
|
~Exception() throw() JSONCPP_OVERRIDE;
|
||||||
char const* what() const throw() override;
|
char const* what() const throw() JSONCPP_OVERRIDE;
|
||||||
protected:
|
protected:
|
||||||
JSONCPP_STRING msg_;
|
JSONCPP_STRING msg_;
|
||||||
};
|
};
|
||||||
@@ -190,6 +190,8 @@ public:
|
|||||||
|
|
||||||
static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value().
|
static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value().
|
||||||
static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null
|
static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null
|
||||||
|
static Value const& nullSingleton(); ///< Prefer this to null or nullRef.
|
||||||
|
|
||||||
/// Minimum signed integer value that can be stored in a Json::Value.
|
/// Minimum signed integer value that can be stored in a Json::Value.
|
||||||
static const LargestInt minLargestInt;
|
static const LargestInt minLargestInt;
|
||||||
/// Maximum signed integer value that can be stored in a Json::Value.
|
/// Maximum signed integer value that can be stored in a Json::Value.
|
||||||
|
@@ -3,17 +3,17 @@
|
|||||||
#ifndef JSON_VERSION_H_INCLUDED
|
#ifndef JSON_VERSION_H_INCLUDED
|
||||||
# define JSON_VERSION_H_INCLUDED
|
# define JSON_VERSION_H_INCLUDED
|
||||||
|
|
||||||
# define JSONCPP_VERSION_STRING "1.7.0"
|
# define JSONCPP_VERSION_STRING "1.7.7"
|
||||||
# define JSONCPP_VERSION_MAJOR 1
|
# define JSONCPP_VERSION_MAJOR 1
|
||||||
# define JSONCPP_VERSION_MINOR 7
|
# define JSONCPP_VERSION_MINOR 7
|
||||||
# define JSONCPP_VERSION_PATCH 0
|
# define JSONCPP_VERSION_PATCH 7
|
||||||
# define JSONCPP_VERSION_QUALIFIER
|
# define JSONCPP_VERSION_QUALIFIER
|
||||||
# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
|
# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8))
|
||||||
|
|
||||||
#ifdef JSONCPP_USING_SECURE_MEMORY
|
#ifdef JSONCPP_USING_SECURE_MEMORY
|
||||||
#undef JSONCPP_USING_SECURE_MEMORY
|
#undef JSONCPP_USING_SECURE_MEMORY
|
||||||
#endif
|
#endif
|
||||||
#define JSONCPP_USING_SECURE_MEMORY 1
|
#define JSONCPP_USING_SECURE_MEMORY 0
|
||||||
// If non-zero, the library zeroes any memory that it has allocated before
|
// If non-zero, the library zeroes any memory that it has allocated before
|
||||||
// it frees its memory.
|
// it frees its memory.
|
||||||
|
|
||||||
|
@@ -112,12 +112,12 @@ public:
|
|||||||
Json::Value settings_;
|
Json::Value settings_;
|
||||||
|
|
||||||
StreamWriterBuilder();
|
StreamWriterBuilder();
|
||||||
~StreamWriterBuilder() override;
|
~StreamWriterBuilder() JSONCPP_OVERRIDE;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \throw std::exception if something goes wrong (e.g. invalid settings)
|
* \throw std::exception if something goes wrong (e.g. invalid settings)
|
||||||
*/
|
*/
|
||||||
StreamWriter* newStreamWriter() const override;
|
StreamWriter* newStreamWriter() const JSONCPP_OVERRIDE;
|
||||||
|
|
||||||
/** \return true if 'settings' are legal and consistent;
|
/** \return true if 'settings' are legal and consistent;
|
||||||
* otherwise, indicate bad settings via 'invalid'.
|
* otherwise, indicate bad settings via 'invalid'.
|
||||||
@@ -158,7 +158,7 @@ class JSON_API FastWriter : public Writer {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
FastWriter();
|
FastWriter();
|
||||||
~FastWriter() override {}
|
~FastWriter() JSONCPP_OVERRIDE {}
|
||||||
|
|
||||||
void enableYAMLCompatibility();
|
void enableYAMLCompatibility();
|
||||||
|
|
||||||
@@ -172,7 +172,7 @@ public:
|
|||||||
void omitEndingLineFeed();
|
void omitEndingLineFeed();
|
||||||
|
|
||||||
public: // overridden from Writer
|
public: // overridden from Writer
|
||||||
JSONCPP_STRING write(const Value& root) override;
|
JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void writeValue(const Value& value);
|
void writeValue(const Value& value);
|
||||||
@@ -210,14 +210,14 @@ private:
|
|||||||
class JSON_API StyledWriter : public Writer {
|
class JSON_API StyledWriter : public Writer {
|
||||||
public:
|
public:
|
||||||
StyledWriter();
|
StyledWriter();
|
||||||
~StyledWriter() override {}
|
~StyledWriter() JSONCPP_OVERRIDE {}
|
||||||
|
|
||||||
public: // overridden from Writer
|
public: // overridden from Writer
|
||||||
/** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
|
/** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
|
||||||
* \param root Value to serialize.
|
* \param root Value to serialize.
|
||||||
* \return String containing the JSON document that represents the root value.
|
* \return String containing the JSON document that represents the root value.
|
||||||
*/
|
*/
|
||||||
JSONCPP_STRING write(const Value& root) override;
|
JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void writeValue(const Value& value);
|
void writeValue(const Value& value);
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
prefix=@CMAKE_INSTALL_PREFIX@
|
prefix=@CMAKE_INSTALL_PREFIX@
|
||||||
exec_prefix=${prefix}
|
exec_prefix=${prefix}
|
||||||
libdir=@LIBRARY_INSTALL_DIR@
|
libdir=${exec_prefix}/@LIBRARY_INSTALL_DIR@
|
||||||
includedir=@INCLUDE_INSTALL_DIR@
|
includedir=${prefix}/@INCLUDE_INSTALL_DIR@
|
||||||
|
|
||||||
Name: jsoncpp
|
Name: jsoncpp
|
||||||
Description: A C++ library for interacting with JSON
|
Description: A C++ library for interacting with JSON
|
||||||
|
@@ -58,7 +58,7 @@ static JSONCPP_STRING readInputTestFile(const char* path) {
|
|||||||
return JSONCPP_STRING("");
|
return JSONCPP_STRING("");
|
||||||
fseek(file, 0, SEEK_END);
|
fseek(file, 0, SEEK_END);
|
||||||
long const size = ftell(file);
|
long const size = ftell(file);
|
||||||
unsigned long const usize = static_cast<unsigned long const>(size);
|
unsigned long const usize = static_cast<unsigned long>(size);
|
||||||
fseek(file, 0, SEEK_SET);
|
fseek(file, 0, SEEK_SET);
|
||||||
JSONCPP_STRING text;
|
JSONCPP_STRING text;
|
||||||
char* buffer = new char[size + 1];
|
char* buffer = new char[size + 1];
|
||||||
|
@@ -42,10 +42,15 @@ ENDIF()
|
|||||||
IF(BUILD_SHARED_LIBS)
|
IF(BUILD_SHARED_LIBS)
|
||||||
ADD_DEFINITIONS( -DJSON_DLL_BUILD )
|
ADD_DEFINITIONS( -DJSON_DLL_BUILD )
|
||||||
ADD_LIBRARY(jsoncpp_lib SHARED ${PUBLIC_HEADERS} ${jsoncpp_sources})
|
ADD_LIBRARY(jsoncpp_lib SHARED ${PUBLIC_HEADERS} ${jsoncpp_sources})
|
||||||
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR})
|
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_SOVERSION})
|
||||||
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp
|
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES OUTPUT_NAME jsoncpp
|
||||||
DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
|
DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
|
||||||
|
|
||||||
|
# Set library's runtime search path on OSX
|
||||||
|
IF(APPLE)
|
||||||
|
SET_TARGET_PROPERTIES( jsoncpp_lib PROPERTIES INSTALL_RPATH "@loader_path/." )
|
||||||
|
ENDIF()
|
||||||
|
|
||||||
INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
|
INSTALL( TARGETS jsoncpp_lib ${INSTALL_EXPORT}
|
||||||
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
|
RUNTIME DESTINATION ${RUNTIME_INSTALL_DIR}
|
||||||
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
|
LIBRARY DESTINATION ${LIBRARY_INSTALL_DIR}
|
||||||
@@ -61,7 +66,7 @@ ENDIF()
|
|||||||
|
|
||||||
IF(BUILD_STATIC_LIBS)
|
IF(BUILD_STATIC_LIBS)
|
||||||
ADD_LIBRARY(jsoncpp_lib_static STATIC ${PUBLIC_HEADERS} ${jsoncpp_sources})
|
ADD_LIBRARY(jsoncpp_lib_static STATIC ${PUBLIC_HEADERS} ${jsoncpp_sources})
|
||||||
SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_VERSION_MAJOR})
|
SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES VERSION ${JSONCPP_VERSION} SOVERSION ${JSONCPP_SOVERSION})
|
||||||
SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES OUTPUT_NAME jsoncpp
|
SET_TARGET_PROPERTIES( jsoncpp_lib_static PROPERTIES OUTPUT_NAME jsoncpp
|
||||||
DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
|
DEBUG_OUTPUT_NAME jsoncpp${DEBUG_LIBNAME_SUFFIX} )
|
||||||
|
|
||||||
|
@@ -401,7 +401,7 @@ Reader::addComment(Location begin, Location end, CommentPlacement placement) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool Reader::readCStyleComment() {
|
bool Reader::readCStyleComment() {
|
||||||
while (current_ != end_) {
|
while ((current_ + 1) < end_) {
|
||||||
Char c = getNextChar();
|
Char c = getNextChar();
|
||||||
if (c == '*' && *current_ == '/')
|
if (c == '*' && *current_ == '/')
|
||||||
break;
|
break;
|
||||||
@@ -430,25 +430,25 @@ void Reader::readNumber() {
|
|||||||
char c = '0'; // stopgap for already consumed character
|
char c = '0'; // stopgap for already consumed character
|
||||||
// integral part
|
// integral part
|
||||||
while (c >= '0' && c <= '9')
|
while (c >= '0' && c <= '9')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
// fractional part
|
// fractional part
|
||||||
if (c == '.') {
|
if (c == '.') {
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
while (c >= '0' && c <= '9')
|
while (c >= '0' && c <= '9')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
}
|
}
|
||||||
// exponential part
|
// exponential part
|
||||||
if (c == 'e' || c == 'E') {
|
if (c == 'e' || c == 'E') {
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
if (c == '+' || c == '-')
|
if (c == '+' || c == '-')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
while (c >= '0' && c <= '9')
|
while (c >= '0' && c <= '9')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Reader::readString() {
|
bool Reader::readString() {
|
||||||
Char c = 0;
|
Char c = '\0';
|
||||||
while (current_ != end_) {
|
while (current_ != end_) {
|
||||||
c = getNextChar();
|
c = getNextChar();
|
||||||
if (c == '\\')
|
if (c == '\\')
|
||||||
@@ -520,7 +520,7 @@ bool Reader::readArray(Token& tokenStart) {
|
|||||||
currentValue().swapPayload(init);
|
currentValue().swapPayload(init);
|
||||||
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
||||||
skipSpaces();
|
skipSpaces();
|
||||||
if (*current_ == ']') // empty array
|
if (current_ != end_ && *current_ == ']') // empty array
|
||||||
{
|
{
|
||||||
Token endArray;
|
Token endArray;
|
||||||
readToken(endArray);
|
readToken(endArray);
|
||||||
@@ -1068,7 +1068,7 @@ bool OurReader::parse(const char* beginDoc,
|
|||||||
Token token;
|
Token token;
|
||||||
skipCommentTokens(token);
|
skipCommentTokens(token);
|
||||||
if (features_.failIfExtra_) {
|
if (features_.failIfExtra_) {
|
||||||
if (token.type_ != tokenError && token.type_ != tokenEndOfStream) {
|
if ((features_.strictRoot_ || token.type_ != tokenError) && token.type_ != tokenEndOfStream) {
|
||||||
addError("Extra non-whitespace after JSON value.", token);
|
addError("Extra non-whitespace after JSON value.", token);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -1361,7 +1361,7 @@ OurReader::addComment(Location begin, Location end, CommentPlacement placement)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool OurReader::readCStyleComment() {
|
bool OurReader::readCStyleComment() {
|
||||||
while (current_ != end_) {
|
while ((current_ + 1) < end_) {
|
||||||
Char c = getNextChar();
|
Char c = getNextChar();
|
||||||
if (c == '*' && *current_ == '/')
|
if (c == '*' && *current_ == '/')
|
||||||
break;
|
break;
|
||||||
@@ -1394,20 +1394,20 @@ bool OurReader::readNumber(bool checkInf) {
|
|||||||
char c = '0'; // stopgap for already consumed character
|
char c = '0'; // stopgap for already consumed character
|
||||||
// integral part
|
// integral part
|
||||||
while (c >= '0' && c <= '9')
|
while (c >= '0' && c <= '9')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
// fractional part
|
// fractional part
|
||||||
if (c == '.') {
|
if (c == '.') {
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
while (c >= '0' && c <= '9')
|
while (c >= '0' && c <= '9')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
}
|
}
|
||||||
// exponential part
|
// exponential part
|
||||||
if (c == 'e' || c == 'E') {
|
if (c == 'e' || c == 'E') {
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
if (c == '+' || c == '-')
|
if (c == '+' || c == '-')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
while (c >= '0' && c <= '9')
|
while (c >= '0' && c <= '9')
|
||||||
c = (current_ = p) < end_ ? *p++ : 0;
|
c = (current_ = p) < end_ ? *p++ : '\0';
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -1503,7 +1503,7 @@ bool OurReader::readArray(Token& tokenStart) {
|
|||||||
currentValue().swapPayload(init);
|
currentValue().swapPayload(init);
|
||||||
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
currentValue().setOffsetStart(tokenStart.start_ - begin_);
|
||||||
skipSpaces();
|
skipSpaces();
|
||||||
if (*current_ == ']') // empty array
|
if (current_ != end_ && *current_ == ']') // empty array
|
||||||
{
|
{
|
||||||
Token endArray;
|
Token endArray;
|
||||||
readToken(endArray);
|
readToken(endArray);
|
||||||
@@ -1619,6 +1619,7 @@ bool OurReader::decodeDouble(Token& token, Value& decoded) {
|
|||||||
Char buffer[bufferSize + 1];
|
Char buffer[bufferSize + 1];
|
||||||
memcpy(buffer, token.start_, ulength);
|
memcpy(buffer, token.start_, ulength);
|
||||||
buffer[length] = 0;
|
buffer[length] = 0;
|
||||||
|
fixNumericLocaleInput(buffer, buffer + length);
|
||||||
count = sscanf(buffer, format, &value);
|
count = sscanf(buffer, format, &value);
|
||||||
} else {
|
} else {
|
||||||
JSONCPP_STRING buffer(token.start_, token.end_);
|
JSONCPP_STRING buffer(token.start_, token.end_);
|
||||||
@@ -1907,7 +1908,7 @@ public:
|
|||||||
{}
|
{}
|
||||||
bool parse(
|
bool parse(
|
||||||
char const* beginDoc, char const* endDoc,
|
char const* beginDoc, char const* endDoc,
|
||||||
Value* root, JSONCPP_STRING* errs) override {
|
Value* root, JSONCPP_STRING* errs) JSONCPP_OVERRIDE {
|
||||||
bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
|
bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
|
||||||
if (errs) {
|
if (errs) {
|
||||||
*errs = reader_.getFormattedErrorMessages();
|
*errs = reader_.getFormattedErrorMessages();
|
||||||
|
@@ -6,6 +6,10 @@
|
|||||||
#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
||||||
#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
||||||
|
|
||||||
|
#ifndef NO_LOCALE_SUPPORT
|
||||||
|
#include <clocale>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* This header provides common string manipulation support, such as UTF-8,
|
/* This header provides common string manipulation support, such as UTF-8,
|
||||||
* portable conversion from/to string...
|
* portable conversion from/to string...
|
||||||
*
|
*
|
||||||
@@ -13,6 +17,14 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
namespace Json {
|
namespace Json {
|
||||||
|
static char getDecimalPoint() {
|
||||||
|
#ifdef NO_LOCALE_SUPPORT
|
||||||
|
return '\0';
|
||||||
|
#else
|
||||||
|
struct lconv* lc = localeconv();
|
||||||
|
return lc ? *(lc->decimal_point) : '\0';
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
/// Converts a unicode code-point to UTF-8.
|
/// Converts a unicode code-point to UTF-8.
|
||||||
static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) {
|
static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) {
|
||||||
@@ -63,7 +75,7 @@ typedef char UIntToStringBuffer[uintToStringBufferSize];
|
|||||||
static inline void uintToString(LargestUInt value, char*& current) {
|
static inline void uintToString(LargestUInt value, char*& current) {
|
||||||
*--current = 0;
|
*--current = 0;
|
||||||
do {
|
do {
|
||||||
*--current = static_cast<signed char>(value % 10U + static_cast<unsigned>('0'));
|
*--current = static_cast<char>(value % 10U + static_cast<unsigned>('0'));
|
||||||
value /= 10;
|
value /= 10;
|
||||||
} while (value != 0);
|
} while (value != 0);
|
||||||
}
|
}
|
||||||
@@ -82,6 +94,18 @@ static inline void fixNumericLocale(char* begin, char* end) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline void fixNumericLocaleInput(char* begin, char* end) {
|
||||||
|
char decimalPoint = getDecimalPoint();
|
||||||
|
if (decimalPoint != '\0' && decimalPoint != '.') {
|
||||||
|
while (begin < end) {
|
||||||
|
if (*begin == '.') {
|
||||||
|
*begin = decimalPoint;
|
||||||
|
}
|
||||||
|
++begin;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace Json {
|
} // namespace Json {
|
||||||
|
|
||||||
#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
|
||||||
|
@@ -31,10 +31,22 @@ namespace Json {
|
|||||||
#else
|
#else
|
||||||
#define ALIGNAS(byte_alignment)
|
#define ALIGNAS(byte_alignment)
|
||||||
#endif
|
#endif
|
||||||
static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
|
//static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 };
|
||||||
const unsigned char& kNullRef = kNull[0];
|
//const unsigned char& kNullRef = kNull[0];
|
||||||
const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
|
//const Value& Value::null = reinterpret_cast<const Value&>(kNullRef);
|
||||||
const Value& Value::nullRef = null;
|
//const Value& Value::nullRef = null;
|
||||||
|
|
||||||
|
// static
|
||||||
|
Value const& Value::nullSingleton()
|
||||||
|
{
|
||||||
|
static Value const nullStatic;
|
||||||
|
return nullStatic;
|
||||||
|
}
|
||||||
|
|
||||||
|
// for backwards compatibility, we'll leave these global references around, but DO NOT
|
||||||
|
// use them in JSONCPP library code any more!
|
||||||
|
Value const& Value::null = Value::nullSingleton();
|
||||||
|
Value const& Value::nullRef = Value::nullSingleton();
|
||||||
|
|
||||||
const Int Value::minInt = Int(~(UInt(-1) / 2));
|
const Int Value::minInt = Int(~(UInt(-1) / 2));
|
||||||
const Int Value::maxInt = Int(UInt(-1) / 2);
|
const Int Value::maxInt = Int(UInt(-1) / 2);
|
||||||
@@ -157,7 +169,7 @@ static inline void releaseStringValue(char* value, unsigned length) {
|
|||||||
static inline void releasePrefixedStringValue(char* value) {
|
static inline void releasePrefixedStringValue(char* value) {
|
||||||
free(value);
|
free(value);
|
||||||
}
|
}
|
||||||
static inline void releaseStringValue(char* value, unsigned length) {
|
static inline void releaseStringValue(char* value, unsigned) {
|
||||||
free(value);
|
free(value);
|
||||||
}
|
}
|
||||||
#endif // JSONCPP_USING_SECURE_MEMORY
|
#endif // JSONCPP_USING_SECURE_MEMORY
|
||||||
@@ -331,6 +343,7 @@ bool Value::CZString::isStaticString() const { return storage_.policy_ == noDupl
|
|||||||
* This optimization is used in ValueInternalMap fast allocator.
|
* This optimization is used in ValueInternalMap fast allocator.
|
||||||
*/
|
*/
|
||||||
Value::Value(ValueType vtype) {
|
Value::Value(ValueType vtype) {
|
||||||
|
static char const empty[] = "";
|
||||||
initBasic(vtype);
|
initBasic(vtype);
|
||||||
switch (vtype) {
|
switch (vtype) {
|
||||||
case nullValue:
|
case nullValue:
|
||||||
@@ -343,7 +356,8 @@ Value::Value(ValueType vtype) {
|
|||||||
value_.real_ = 0.0;
|
value_.real_ = 0.0;
|
||||||
break;
|
break;
|
||||||
case stringValue:
|
case stringValue:
|
||||||
value_.string_ = 0;
|
// allocated_ == false, so this is safe.
|
||||||
|
value_.string_ = const_cast<char*>(static_cast<char const*>(empty));
|
||||||
break;
|
break;
|
||||||
case arrayValue:
|
case arrayValue:
|
||||||
case objectValue:
|
case objectValue:
|
||||||
@@ -488,8 +502,7 @@ Value::~Value() {
|
|||||||
JSON_ASSERT_UNREACHABLE;
|
JSON_ASSERT_UNREACHABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (comments_)
|
delete[] comments_;
|
||||||
delete[] comments_;
|
|
||||||
|
|
||||||
value_.uint_ = 0;
|
value_.uint_ = 0;
|
||||||
}
|
}
|
||||||
@@ -972,7 +985,7 @@ Value& Value::operator[](ArrayIndex index) {
|
|||||||
if (it != value_.map_->end() && (*it).first == key)
|
if (it != value_.map_->end() && (*it).first == key)
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
|
|
||||||
ObjectValues::value_type defaultValue(key, nullRef);
|
ObjectValues::value_type defaultValue(key, nullSingleton());
|
||||||
it = value_.map_->insert(it, defaultValue);
|
it = value_.map_->insert(it, defaultValue);
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
}
|
}
|
||||||
@@ -989,11 +1002,11 @@ const Value& Value::operator[](ArrayIndex index) const {
|
|||||||
type_ == nullValue || type_ == arrayValue,
|
type_ == nullValue || type_ == arrayValue,
|
||||||
"in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
|
"in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
|
||||||
if (type_ == nullValue)
|
if (type_ == nullValue)
|
||||||
return nullRef;
|
return nullSingleton();
|
||||||
CZString key(index);
|
CZString key(index);
|
||||||
ObjectValues::const_iterator it = value_.map_->find(key);
|
ObjectValues::const_iterator it = value_.map_->find(key);
|
||||||
if (it == value_.map_->end())
|
if (it == value_.map_->end())
|
||||||
return nullRef;
|
return nullSingleton();
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1027,7 +1040,7 @@ Value& Value::resolveReference(const char* key) {
|
|||||||
if (it != value_.map_->end() && (*it).first == actualKey)
|
if (it != value_.map_->end() && (*it).first == actualKey)
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
|
|
||||||
ObjectValues::value_type defaultValue(actualKey, nullRef);
|
ObjectValues::value_type defaultValue(actualKey, nullSingleton());
|
||||||
it = value_.map_->insert(it, defaultValue);
|
it = value_.map_->insert(it, defaultValue);
|
||||||
Value& value = (*it).second;
|
Value& value = (*it).second;
|
||||||
return value;
|
return value;
|
||||||
@@ -1047,7 +1060,7 @@ Value& Value::resolveReference(char const* key, char const* cend)
|
|||||||
if (it != value_.map_->end() && (*it).first == actualKey)
|
if (it != value_.map_->end() && (*it).first == actualKey)
|
||||||
return (*it).second;
|
return (*it).second;
|
||||||
|
|
||||||
ObjectValues::value_type defaultValue(actualKey, nullRef);
|
ObjectValues::value_type defaultValue(actualKey, nullSingleton());
|
||||||
it = value_.map_->insert(it, defaultValue);
|
it = value_.map_->insert(it, defaultValue);
|
||||||
Value& value = (*it).second;
|
Value& value = (*it).second;
|
||||||
return value;
|
return value;
|
||||||
@@ -1055,7 +1068,7 @@ Value& Value::resolveReference(char const* key, char const* cend)
|
|||||||
|
|
||||||
Value Value::get(ArrayIndex index, const Value& defaultValue) const {
|
Value Value::get(ArrayIndex index, const Value& defaultValue) const {
|
||||||
const Value* value = &((*this)[index]);
|
const Value* value = &((*this)[index]);
|
||||||
return value == &nullRef ? defaultValue : *value;
|
return value == &nullSingleton() ? defaultValue : *value;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
|
bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
|
||||||
@@ -1074,13 +1087,13 @@ Value const* Value::find(char const* key, char const* cend) const
|
|||||||
const Value& Value::operator[](const char* key) const
|
const Value& Value::operator[](const char* key) const
|
||||||
{
|
{
|
||||||
Value const* found = find(key, key + strlen(key));
|
Value const* found = find(key, key + strlen(key));
|
||||||
if (!found) return nullRef;
|
if (!found) return nullSingleton();
|
||||||
return *found;
|
return *found;
|
||||||
}
|
}
|
||||||
Value const& Value::operator[](JSONCPP_STRING const& key) const
|
Value const& Value::operator[](JSONCPP_STRING const& key) const
|
||||||
{
|
{
|
||||||
Value const* found = find(key.data(), key.data() + key.length());
|
Value const* found = find(key.data(), key.data() + key.length());
|
||||||
if (!found) return nullRef;
|
if (!found) return nullSingleton();
|
||||||
return *found;
|
return *found;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1103,7 +1116,7 @@ Value& Value::operator[](const CppTL::ConstString& key) {
|
|||||||
Value const& Value::operator[](CppTL::ConstString const& key) const
|
Value const& Value::operator[](CppTL::ConstString const& key) const
|
||||||
{
|
{
|
||||||
Value const* found = find(key.c_str(), key.end_c_str());
|
Value const* found = find(key.c_str(), key.end_c_str());
|
||||||
if (!found) return nullRef;
|
if (!found) return nullSingleton();
|
||||||
return *found;
|
return *found;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -1151,7 +1164,7 @@ Value Value::removeMember(const char* key)
|
|||||||
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
|
JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue,
|
||||||
"in Json::Value::removeMember(): requires objectValue");
|
"in Json::Value::removeMember(): requires objectValue");
|
||||||
if (type_ == nullValue)
|
if (type_ == nullValue)
|
||||||
return nullRef;
|
return nullSingleton();
|
||||||
|
|
||||||
Value removed; // null
|
Value removed; // null
|
||||||
removeMember(key, key + strlen(key), &removed);
|
removeMember(key, key + strlen(key), &removed);
|
||||||
@@ -1491,12 +1504,12 @@ void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) {
|
|||||||
index = index * 10 + ArrayIndex(*current - '0');
|
index = index * 10 + ArrayIndex(*current - '0');
|
||||||
args_.push_back(index);
|
args_.push_back(index);
|
||||||
}
|
}
|
||||||
if (current == end || *current++ != ']')
|
if (current == end || *++current != ']')
|
||||||
invalidPath(path, int(current - path.c_str()));
|
invalidPath(path, int(current - path.c_str()));
|
||||||
} else if (*current == '%') {
|
} else if (*current == '%') {
|
||||||
addPathInArg(path, in, itInArg, PathArgument::kindKey);
|
addPathInArg(path, in, itInArg, PathArgument::kindKey);
|
||||||
++current;
|
++current;
|
||||||
} else if (*current == '.') {
|
} else if (*current == '.' || *current == ']') {
|
||||||
++current;
|
++current;
|
||||||
} else {
|
} else {
|
||||||
const char* beginName = current;
|
const char* beginName = current;
|
||||||
@@ -1516,7 +1529,7 @@ void Path::addPathInArg(const JSONCPP_STRING& /*path*/,
|
|||||||
} else if ((*itInArg)->kind_ != kind) {
|
} else if ((*itInArg)->kind_ != kind) {
|
||||||
// Error: bad argument type
|
// Error: bad argument type
|
||||||
} else {
|
} else {
|
||||||
args_.push_back(**itInArg);
|
args_.push_back(**itInArg++);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1531,16 +1544,19 @@ const Value& Path::resolve(const Value& root) const {
|
|||||||
if (arg.kind_ == PathArgument::kindIndex) {
|
if (arg.kind_ == PathArgument::kindIndex) {
|
||||||
if (!node->isArray() || !node->isValidIndex(arg.index_)) {
|
if (!node->isArray() || !node->isValidIndex(arg.index_)) {
|
||||||
// Error: unable to resolve path (array value expected at position...
|
// Error: unable to resolve path (array value expected at position...
|
||||||
|
return Value::null;
|
||||||
}
|
}
|
||||||
node = &((*node)[arg.index_]);
|
node = &((*node)[arg.index_]);
|
||||||
} else if (arg.kind_ == PathArgument::kindKey) {
|
} else if (arg.kind_ == PathArgument::kindKey) {
|
||||||
if (!node->isObject()) {
|
if (!node->isObject()) {
|
||||||
// Error: unable to resolve path (object value expected at position...)
|
// Error: unable to resolve path (object value expected at position...)
|
||||||
|
return Value::null;
|
||||||
}
|
}
|
||||||
node = &((*node)[arg.key_]);
|
node = &((*node)[arg.key_]);
|
||||||
if (node == &Value::nullRef) {
|
if (node == &Value::nullSingleton()) {
|
||||||
// Error: unable to resolve path (object has no member named '' at
|
// Error: unable to resolve path (object has no member named '' at
|
||||||
// position...)
|
// position...)
|
||||||
|
return Value::null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1559,7 +1575,7 @@ Value Path::resolve(const Value& root, const Value& defaultValue) const {
|
|||||||
if (!node->isObject())
|
if (!node->isObject())
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
node = &((*node)[arg.key_]);
|
node = &((*node)[arg.key_]);
|
||||||
if (node == &Value::nullRef)
|
if (node == &Value::nullSingleton())
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -135,6 +135,7 @@ JSONCPP_STRING valueToString(UInt value) {
|
|||||||
|
|
||||||
#endif // # if defined(JSON_HAS_INT64)
|
#endif // # if defined(JSON_HAS_INT64)
|
||||||
|
|
||||||
|
namespace {
|
||||||
JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) {
|
JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) {
|
||||||
// Allocate a buffer that is more than large enough to store the 16 digits of
|
// Allocate a buffer that is more than large enough to store the 16 digits of
|
||||||
// precision requested below.
|
// precision requested below.
|
||||||
@@ -164,6 +165,7 @@ JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int p
|
|||||||
fixNumericLocale(buffer, buffer + len);
|
fixNumericLocale(buffer, buffer + len);
|
||||||
return buffer;
|
return buffer;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); }
|
JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); }
|
||||||
|
|
||||||
@@ -351,7 +353,7 @@ void FastWriter::writeValue(const Value& value) {
|
|||||||
break;
|
break;
|
||||||
case stringValue:
|
case stringValue:
|
||||||
{
|
{
|
||||||
// Is NULL possible for value.string_?
|
// Is NULL possible for value.string_? No.
|
||||||
char const* str;
|
char const* str;
|
||||||
char const* end;
|
char const* end;
|
||||||
bool ok = value.getString(&str, &end);
|
bool ok = value.getString(&str, &end);
|
||||||
@@ -421,7 +423,7 @@ void StyledWriter::writeValue(const Value& value) {
|
|||||||
break;
|
break;
|
||||||
case stringValue:
|
case stringValue:
|
||||||
{
|
{
|
||||||
// Is NULL possible for value.string_?
|
// Is NULL possible for value.string_? No.
|
||||||
char const* str;
|
char const* str;
|
||||||
char const* end;
|
char const* end;
|
||||||
bool ok = value.getString(&str, &end);
|
bool ok = value.getString(&str, &end);
|
||||||
@@ -638,7 +640,7 @@ void StyledStreamWriter::writeValue(const Value& value) {
|
|||||||
break;
|
break;
|
||||||
case stringValue:
|
case stringValue:
|
||||||
{
|
{
|
||||||
// Is NULL possible for value.string_?
|
// Is NULL possible for value.string_? No.
|
||||||
char const* str;
|
char const* str;
|
||||||
char const* end;
|
char const* end;
|
||||||
bool ok = value.getString(&str, &end);
|
bool ok = value.getString(&str, &end);
|
||||||
@@ -839,7 +841,7 @@ struct BuiltStyledStreamWriter : public StreamWriter
|
|||||||
JSONCPP_STRING const& endingLineFeedSymbol,
|
JSONCPP_STRING const& endingLineFeedSymbol,
|
||||||
bool useSpecialFloats,
|
bool useSpecialFloats,
|
||||||
unsigned int precision);
|
unsigned int precision);
|
||||||
int write(Value const& root, JSONCPP_OSTREAM* sout) override;
|
int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE;
|
||||||
private:
|
private:
|
||||||
void writeValue(Value const& value);
|
void writeValue(Value const& value);
|
||||||
void writeArrayValue(Value const& value);
|
void writeArrayValue(Value const& value);
|
||||||
@@ -919,7 +921,7 @@ void BuiltStyledStreamWriter::writeValue(Value const& value) {
|
|||||||
break;
|
break;
|
||||||
case stringValue:
|
case stringValue:
|
||||||
{
|
{
|
||||||
// Is NULL is possible for value.string_?
|
// Is NULL is possible for value.string_? No.
|
||||||
char const* str;
|
char const* str;
|
||||||
char const* end;
|
char const* end;
|
||||||
bool ok = value.getString(&str, &end);
|
bool ok = value.getString(&str, &end);
|
||||||
@@ -1000,7 +1002,7 @@ void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
|
|||||||
if (!indentation_.empty()) *sout_ << " ";
|
if (!indentation_.empty()) *sout_ << " ";
|
||||||
for (unsigned index = 0; index < size; ++index) {
|
for (unsigned index = 0; index < size; ++index) {
|
||||||
if (index > 0)
|
if (index > 0)
|
||||||
*sout_ << ", ";
|
*sout_ << ((!indentation_.empty()) ? ", " : ",");
|
||||||
*sout_ << childValues_[index];
|
*sout_ << childValues_[index];
|
||||||
}
|
}
|
||||||
if (!indentation_.empty()) *sout_ << " ";
|
if (!indentation_.empty()) *sout_ << " ";
|
||||||
|
@@ -271,8 +271,8 @@ TestResult& checkStringEqual(TestResult& result,
|
|||||||
} \
|
} \
|
||||||
\
|
\
|
||||||
public: /* overidden from TestCase */ \
|
public: /* overidden from TestCase */ \
|
||||||
const char* testName() const override { return #FixtureType "/" #name; } \
|
const char* testName() const JSONCPP_OVERRIDE { return #FixtureType "/" #name; } \
|
||||||
void runTestCase() override; \
|
void runTestCase() JSONCPP_OVERRIDE; \
|
||||||
}; \
|
}; \
|
||||||
\
|
\
|
||||||
void Test##FixtureType##name::runTestCase()
|
void Test##FixtureType##name::runTestCase()
|
||||||
|
Reference in New Issue
Block a user