Merge pull request #1889 from mwkroening/extract-jsoncpp

Remove custom functions from jsoncpp headers
This commit is contained in:
quietly-turning
2020-06-18 15:40:14 -04:00
committed by GitHub
7 changed files with 26 additions and 86 deletions
-7
View File
@@ -234,13 +234,6 @@ namespace Json {
double asDouble() const; double asDouble() const;
bool asBool() const; bool asBool() const;
bool TryGet( std::string &out ) const { if(!isString()) return false; out=asString(); return true; }
bool TryGet( int &out ) const { if(!isInt()) return false; out=asInt(); return true; }
bool TryGet( UInt &out ) const { if(!isUInt()) return false; out=asUInt(); return true; }
bool TryGet( double &out ) const { if(!isDouble()) return false; out=asDouble(); return true; }
bool TryGet( float &out ) const { if(!isDouble()) return false; out=(float)asDouble(); return true; }
bool TryGet( bool &out ) const { if(!isBool()) return false; out=asBool(); return true; }
bool isNull() const; bool isNull() const;
bool isBool() const; bool isBool() const;
bool isInt() const; bool isInt() const;
+3 -4
View File
@@ -1,5 +1,5 @@
#include "json/reader.h" #include <json/reader.h>
#include "json/value.h" #include <json/value.h>
#include <utility> #include <utility>
#include <cstdio> #include <cstdio>
#include <cassert> #include <cassert>
@@ -877,8 +877,7 @@ std::istream& operator>>( std::istream &sin, Value &root )
Json::Reader reader; Json::Reader reader;
bool ok = reader.parse(sin, root, true); bool ok = reader.parse(sin, root, true);
//JSON_ASSERT( ok ); //JSON_ASSERT( ok );
// if (!ok) throw std::runtime_error(reader.getFormatedErrorMessages()); if (!ok) throw std::runtime_error(reader.getFormatedErrorMessages());
assert(ok);
return sin; return sin;
} }
+3 -3
View File
@@ -1,6 +1,6 @@
#include <iostream> #include <iostream>
#include "json/value.h" #include <json/value.h>
#include "json/writer.h" #include <json/writer.h>
#include <utility> #include <utility>
#include <stdexcept> #include <stdexcept>
#include <cstring> #include <cstring>
@@ -15,7 +15,7 @@
#define JSON_ASSERT_UNREACHABLE assert( false ) #define JSON_ASSERT_UNREACHABLE assert( false )
#define JSON_ASSERT( condition ) assert( condition ); // @todo <= change this into an exception throw #define JSON_ASSERT( condition ) assert( condition ); // @todo <= change this into an exception throw
#define JSON_ASSERT_MESSAGE( condition, message ) if (!( condition )) assert(false); /* throw std::runtime_error( message ); */ #define JSON_ASSERT_MESSAGE( condition, message ) if (!( condition )) throw std::runtime_error( message );
namespace Json { namespace Json {
+4 -4
View File
@@ -1,4 +1,4 @@
#include "json/writer.h" #include <json/writer.h>
#include <utility> #include <utility>
#include <assert.h> #include <assert.h>
#include <stdio.h> #include <stdio.h>
@@ -111,7 +111,7 @@ std::string valueToString( bool value )
std::string valueToQuotedString( const char *value ) std::string valueToQuotedString( const char *value )
{ {
// Not sure how to handle unicode... // Not sure how to handle unicode...
if (strpbrk(value, "\"\\\b\f\n\r\t") == nullptr && !containsControlCharacter( value )) if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && !containsControlCharacter( value ))
return std::string("\"") + value + "\""; return std::string("\"") + value + "\"";
// We have to walk value and escape any special characters. // We have to walk value and escape any special characters.
// Appending to std::string is not efficient, but this should be rare. // Appending to std::string is not efficient, but this should be rare.
@@ -542,7 +542,7 @@ StyledWriter::normalizeEOL( const std::string &text )
// ////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////
StyledStreamWriter::StyledStreamWriter( std::string indentation ) StyledStreamWriter::StyledStreamWriter( std::string indentation )
: document_(nullptr) : document_(NULL)
, rightMargin_( 74 ) , rightMargin_( 74 )
, indentation_( indentation ) , indentation_( indentation )
{ {
@@ -559,7 +559,7 @@ StyledStreamWriter::write( std::ostream &out, const Value &root )
writeValue( root ); writeValue( root );
writeCommentAfterValueOnSameLine( root ); writeCommentAfterValueOnSameLine( root );
*document_ << "\n"; *document_ << "\n";
document_ = nullptr; // Forget the stream, for safety. document_ = NULL; // Forget the stream, for safety.
} }
+13
View File
@@ -75,6 +75,19 @@ bool JsonUtil::WriteFile(const Json::Value &root, const RString &sFile, bool bMi
return true; return true;
} }
std::vector<RString> JsonUtil::DeserializeArrayStrings(const Json::Value &value)
{
std::vector<RString> values;
for(auto &&inner_value : value)
{
if(inner_value.isConvertibleTo(Json::stringValue))
{
values.push_back(inner_value.asString());
}
}
return values;
}
/* /*
* (c) 2001-2004 Chris Danford * (c) 2001-2004 Chris Danford
* All rights reserved. * All rights reserved.
+2 -67
View File
@@ -14,6 +14,8 @@ namespace JsonUtil
bool WriteFile(const Json::Value &root, const RString &sFile, bool bMinified); bool WriteFile(const Json::Value &root, const RString &sFile, bool bMinified);
std::vector<RString> DeserializeArrayStrings(const Json::Value &array);
template<class T> template<class T>
static void SerializeVectorObjects(const vector<T> &v, void fn(const T &, Json::Value &), Json::Value &root) static void SerializeVectorObjects(const vector<T> &v, void fn(const T &, Json::Value &), Json::Value &root)
{ {
@@ -195,57 +197,6 @@ namespace JsonUtil
} }
} }
template<class T>
static void DeserializeArrayValues(vector<T> &v, const Json::Value &root)
{
v.clear();
for( unsigned i=0; i<root.size(); i++ )
{
T t;
if( root[i].TryGet( t ) )
v.push_back( t );
}
}
// don't pull in the set header here
template<typename S, typename T>
static void DeserializeArrayValuesIntoSet(S &s, const Json::Value &root)
{
s.clear();
for( unsigned i=0; i<root.size(); i++ )
{
T t;
if( root[i].TryGet( t ) )
s.insert( t );
}
}
template<typename T>
static void DeserializeArrayValuesIntoVector(vector<T> &v, const Json::Value &root)
{
v.clear();
for( unsigned i=0; i<root.size(); i++ )
{
T t;
if( root[i].TryGet( t ) )
v.push_back( t );
}
}
template <typename M>
static void DeserializeValueToValueMap(M &m, const Json::Value &root)
{
for( Json::Value::const_iterator iter = root.begin(); iter != root.end(); iter++ )
(*iter).TryGet( m[ iter.memberName() ] );
}
template <typename M, typename E, typename F>
static void DeserializeStringToValueMap(M &m, F fnToValue(E e), const Json::Value &root)
{
for( Json::Value::const_iterator iter = root.begin(); iter != root.end(); iter++ )
(*iter).TryGet( m[ fnToValue(iter.memberName()) ] );
}
template <typename M, typename E, typename F> template <typename M, typename E, typename F>
static void DeserializeStringToObjectMap(M &m, F fnToValue(E e), const Json::Value &root) static void DeserializeStringToObjectMap(M &m, F fnToValue(E e), const Json::Value &root)
{ {
@@ -272,22 +223,6 @@ namespace JsonUtil
} }
} }
template <typename K, typename V>
static void DeserializeObjectToValueMapAsArray(map<K,V> &m, const RString &sKeyName, const RString &sValueName, const Json::Value &root)
{
for( unsigned i=0; i<root.size(); i++ )
{
const Json::Value &root2 = root[i];
K k;
if( !k.Deserialize( root2[sKeyName] ) )
continue;
V v;
if( !root2[sValueName].TryGet(v) )
continue;
m[k] = v;
}
}
template<class T> template<class T>
static void DeserializeVectorValues(vector<T> &v, const Json::Value &root) static void DeserializeVectorValues(vector<T> &v, const Json::Value &root)
{ {
+1 -1
View File
@@ -214,7 +214,7 @@ static void Deserialize( Song &out, const Json::Value &root )
JsonUtil::DeserializeVectorObjects( vBgc, Deserialize, root["ForegroundChanges"] ); JsonUtil::DeserializeVectorObjects( vBgc, Deserialize, root["ForegroundChanges"] );
} }
JsonUtil::DeserializeArrayValuesIntoVector( out.m_vsKeysoundFile, root["KeySounds"] ); out.m_vsKeysoundFile = JsonUtil::DeserializeArrayStrings(root["KeySounds"]);
{ {
vector<Steps*> vpSteps; vector<Steps*> vpSteps;