10 #define STRINGKEYMAP_H 13 #include "classdesc.h" 14 #include "json_pack_base.h" 17 #include "xsd_generate_base.h" 31 json_spirit::mValue& parent=
json_find(j,head(d));
32 if (parent.type()!=json_spirit::obj_type)
33 throw json_pack_error(
"attempt to pack an array member into a non-object");
37 for (; i!=a.end(); ++i)
52 const json_spirit::mValue& val=
json_find(j,d);
53 if (val.type()!=json_spirit::obj_type)
57 const json_spirit::mObject& arr=val.get_obj();
58 for (json_spirit::mObject::const_iterator i=arr.begin(); i!=arr.end(); ++i)
59 json_unpack(j,d+
"."+i->first,a[i->first]);
71 std::ostringstream os;
73 string eName=typeName<T>().c_str();
74 eName=eName.substr(0,eName.find(
'<'));
76 const char *el=eName.c_str()+eName.length();
77 while (el!=eName.c_str() && *(el-1)!=
' ' && *(el-1)!=
':') el--;
80 os <<
" <xs:complexType name=\"" << type <<
"\">\n";
81 os <<
" <xs:sequence minOccurs=\"0\" maxOccurs=\"unbounded\">\n";
85 os <<
" <xs:any processContents=\"lax\"/>\n";
86 os <<
" </xs:sequence>\n";
87 os <<
" </xs:complexType>\n";
92 xsd_generate(g,
"",T());
97 using classdesc::xsd_generate;
108 {json_pack_stringKeyMap(j,d,x);}
115 {json_unpack_stringKeyMap(j,d,x);}
126 cd::xml_pack_t::Tag tag(x,d);
129 ::xml_pack(x,d+
"."+i->first,i->second);
139 for (cd::xml_unpack_t::ContentMap::const_iterator i=x.
firstToken(d);
140 i!=x.endToken(d); ++i)
142 std::string key=i->first;
143 size_t p=i->first.rfind(
'.');
144 if (p!=std::string::npos) key=key.substr(p);
145 ::xml_unpack(x,i->first,arg[key]);
154 #pragma omit json_pack classdesc::StringKeyMap 155 #pragma omit json_unpack classdesc::StringKeyMap 156 #pragma omit xml_pack classdesc::StringKeyMap 157 #pragma omit xml_unpack classdesc::StringKeyMap 158 #pragma omit xsd_generate classdesc::StringKeyMap 160 #include "stringKeyMap.cd" Definition: json_pack_base.h:43
void addDependency(const string &type, const string &dependency)
add a dependency between type and dependency (XSD qualifed name)
Definition: xsd_generate_base.h:99
XML serialisation descriptor.
void json_pack(json_pack_t &o, const string &d, T &a)
forward declare generic json operations
Definition: json_pack_epilogue.h:53
Definition: classdesc_access.h:23
Definition: classdesc_access.h:26
bool throw_on_error
enable exceptions on error conditions
Definition: json_pack_base.h:46
void addMember(const string &name, const string &memberType)
add an attribute name with XSD type memberType
Definition: xsd_generate_base.h:65
Definition: xml_unpack_base.h:268
Definition: classdesc_access.h:25
Definition: xml_pack_base.h:49
Definition: json_pack_base.h:20
ContentMap::const_iterator firstToken(const std::string &prefix) const
first token starting with prefix
Definition: xml_unpack_base.h:321
void defineType(const string &type, const string &def)
add a complete XSD definition for type
Definition: xsd_generate_base.h:145
Contains definitions related to classdesc functionality.
Definition: arrays.h:2514
XML deserialisation descriptor.
Contains access_* structs, and nothing else. These structs are used to gain access to private members...
Definition: accessor.h:55
json_spirit::mValue & json_find(json_spirit::mValue &x, std::string name)
find an object named by name within the json object x
Definition: json_pack_base.h:73
Definition: stringKeyMap.h:24
Definition: classdesc_access.h:24
Definition: xsd_generate_base.h:20