9#ifndef CLASSDESC_JSON_PACK_EPILOGUE_H
10#define CLASSDESC_JSON_PACK_EPILOGUE_H
13#include "json_pack-allCDs.h"
20 static string name() {
return "classdesc::json_pack_t";}
25 public Not< Or< Or< Or< Or<is_fundamental<T>,is_string<T> >, is_sequence<T> >,
26 And<is_associative_container<T>,Not<is_stringKeyMap<T> > > >, is_pointer<T> > >
29 template <
class T>
typename
39 json5_parser::mValue& parent=
json_find(o,head(d));
40 if (parent.type()!=json5_parser::obj_type)
43 json5_parser::mObject::iterator member=parent.get_obj().find(tail(d));
44 if (member==parent.get_obj().end())
45 parent.get_obj().insert(make_pair(tail(d), json5_parser::mObject()));
47 catch (json_pack_error&)
53 classdesc_access::access_json_pack<T>()(o,d,a);
56 template <
class T>
typename
59 {classdesc_access::access_json_unpack<T>()(o,d,a);}
64 template <
class T>
void json_unpack(json_unpack_t& o,
const string& d, T& a)
65 {json_unpackp(o,d,a);}
67 template <
class T>
void json_packp(
json_pack_t& o,
const string& d,
T* a)
70 template <
class T>
void json_packp(
json_pack_t& o,
const string& d,
const char* a)
78#if defined(__cplusplus) && __cplusplus>=201103L
88#ifndef JSON_PACK_NO_FALL_THROUGH_TO_STREAMING
90 template <
class T,
class Enable>
94 void operator()(cd::json_pack_t& b,
const cd::string& d, T& a)
102 template <
class T,
class Enable>
106 void operator()(cd::json_unpack_t& b,
const cd::string& d,
111 std::istringstream i(s);
117#if defined(__cplusplus) && __cplusplus>=201103L
122 void operator()(cd::json_unpack_t& b,
const cd::string& d,
124 {b<<cd::typeName<T>();}
130 void operator()(cd::json_unpack_t& b,
const cd::string& d,
139 void operator()(cd::json_pack_t& b,
const cd::string& d, U& a)
144 void operator()(cd::json_pack_t& b,
const cd::string& d, cd::json_pack_t& a){a=b;}
145 void operator()(cd::json_pack_t& b,
const cd::string& d,
const cd::json_pack_t& a){}
151 void operator()(cd::json_pack_t& b,
const cd::string& d, U& a)
152 {b=cd::json_pack_t(a);}
156 void operator()(cd::json_pack_t& b,
const cd::string& d, json5_parser::mValue& a){a=b;}
157 void operator()(cd::json_pack_t& b,
const cd::string& d,
const json5_parser::mValue& a){}
186#ifdef CLASSDESC_POLYPACKBASE_H
188 public cd::NullDescriptor<cd::json_pack_t> {};
189 template <>
struct access_json_unpack<cd::PolyPackBase>:
190 public cd::NullDescriptor<cd::json_unpack_t> {};
197#ifdef CLASSDESC_POLYJSONBASE_H
208#ifdef CLASSDESC_POLYXMLBASE_H
220template <
class _CD_ARG_TYPE>
223::json_pack(targ,desc+
"",(
int&)arg);
225template <
class _CD_TYPE>
231template <
class _CD_ARG_TYPE>
235template <
class _CD_TYPE>
242template <
class _CD_ARG_TYPE>
243void operator()(classdesc::json_unpack_t& targ,
const classdesc::string& desc,_CD_ARG_TYPE& arg)
245::json_unpack(targ,desc+
"",(
int&)arg);
247template <
class _CD_TYPE>
248void type(classdesc::json_unpack_t& targ,
const classdesc::string& desc)
253template <
class _CD_ARG_TYPE>
254void operator()(classdesc::json_unpack_t& targ,
const classdesc::string& desc,_CD_ARG_TYPE& arg)
257template <
class _CD_TYPE>
258void type(classdesc::json_unpack_t& targ,
const classdesc::string& desc)
264#include "polyAccessJsonPack.h"
Definition json_pack_base.h:35
Definition json_pack_base.h:99
void objectify()
convert this to an object type (if not already)
Definition json_pack_base.h:160
bool throw_on_error
enable exceptions on error conditions
Definition json_pack_base.h:101
Contains access_* structs, and nothing else. These structs are used to gain access to private members...
Definition classdesc_access.h:20
Contains definitions related to classdesc functionality.
json5_parser::mValue & json_find(json5_parser::mValue &x, std::string name)
find an object named by name within the json object x
Definition json_pack_base.h:228
void json_pack(json_pack_t &o, const string &d, T &a)
forward declare generic json operations
Definition json_pack_epilogue.h:61
Definition json_pack_epilogue.h:27
Definition classdesc.h:405
helper for constructing null descriptors
Definition classdesc.h:1106
types for RESTProcess and other embedding applications
Definition classdesc.h:1137
Definition classdesc.h:299
controlled template specialisation: stolen from boost::enable_if.
Definition classdesc.h:282
Definition classdesc.h:571
Definition json_pack_epilogue.h:92
Definition json_pack_epilogue.h:104