Skip to content

Commit

Permalink
Merge pull request #31 from GolosChain/26-switch-to-legacy-parser
Browse files Browse the repository at this point in the history
Set default json parser to legacy. #26
  • Loading branch information
afalaleev committed May 6, 2019
2 parents 32d6f9f + be2cb66 commit 31aa538
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
2 changes: 1 addition & 1 deletion include/fc/io/json.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ namespace fc
strict_parser = 1,
relaxed_parser = 2,
legacy_parser_with_string_doubles = 3,
default_parser = relaxed_parser,
default_parser = legacy_parser,
};
enum output_formatting
{
Expand Down
32 changes: 31 additions & 1 deletion include/fc/variant.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,8 @@
#include <fc/smart_ref_fwd.hpp>
#include <fc/time.hpp>

#include <boost/tuple/tuple.hpp>

#include <boost/multi_index_container_fwd.hpp>

#include <boost/multiprecision/cpp_int.hpp>
Expand Down Expand Up @@ -184,7 +186,8 @@ namespace fc
template<typename A, typename B>
void from_variant( const variant& v, std::pair<A,B>& p );


template<typename... Elements>
void to_variant( const std::tuple<Elements...>& t, variant& v );

/**
* @brief stores null, int64, uint64, double, bool, string, std::vector<variant>,
Expand Down Expand Up @@ -710,6 +713,33 @@ namespace fc
n = boost::multiprecision::number<T>(v.get_string());
}

namespace detail {
template<int, int> struct tuple_to_variants;

template<int Max> struct tuple_to_variants<Max, Max> {
template<typename Tuple> void operator()( const Tuple&, variants& ) const {
// no more elements
}
};

template<int I, int Max> struct tuple_to_variants {
template<typename Tuple> void operator()( const Tuple& t, variants& vars ) const {
variant v;
to_variant(boost::tuples::get<I>(t), v);
vars.push_back(std::move(v));
tuple_to_variants<I + 1, Max>()(t, vars);
}
};
} // namespace detail

template<typename... Elements>
void to_variant( const boost::tuple<Elements...>& t, variant& v ) {
variants vars;
vars.reserve(boost::tuples::length<boost::tuple<Elements...>>::value);
detail::tuple_to_variants<0, boost::tuples::length<boost::tuple<Elements...>>::value>()(t, vars);
v = std::move(vars);
}

variant operator + ( const variant& a, const variant& b );
variant operator - ( const variant& a, const variant& b );
variant operator * ( const variant& a, const variant& b );
Expand Down

0 comments on commit 31aa538

Please sign in to comment.