19 #include "IDSerializerRapid.hpp"
20 #include "IDTypes.hpp"
21 #include <tobicore/TCException.hpp>
22 #include <tobicore/TCTools.hpp>
23 #include <tobicore/rapidxml.hpp>
24 #include <tobicore/rapidxml_print.hpp>
33 using namespace rapidxml;
36 const bool declaration)
53 throw TCException(
"iD message not set, cannot serialize");
59 std::string xml_as_string;
60 std::string xml_no_indent;
64 xml_node<>* decl = doc.allocate_node(node_declaration);
65 decl->append_attribute(doc.allocate_attribute(
"version",
"1.0"));
66 decl->append_attribute(doc.allocate_attribute(
"encoding",
"utf-8"));
67 doc.append_node(decl);
70 char cacheFidx[16], cacheEvent[128];
75 std::string timestamp, reference;
80 xml_node<>* root = doc.allocate_node(node_element, IDMESSAGE_ROOTNODE);
81 root->append_attribute(doc.allocate_attribute(IDMESSAGE_VERSIONNODE,
83 root->append_attribute(doc.allocate_attribute(IDMESSAGE_DESCRIPTIONNODE,
85 root->append_attribute(doc.allocate_attribute(IDMESSAGE_FRAMENODE_2,
87 root->append_attribute(doc.allocate_attribute(IDMESSAGE_FAMILYNODE,
89 root->append_attribute(doc.allocate_attribute(IDMESSAGE_EVENTNODE,
91 root->append_attribute(doc.allocate_attribute(IDMESSAGE_TIMESTAMPNODE_2,
93 root->append_attribute(doc.allocate_attribute(IDMESSAGE_REFERENCENODE_2,
95 doc.append_node(root);
98 print(std::back_inserter(*buffer), doc);
100 print(std::back_inserter(*buffer), doc, print_no_indenting);
120 std::vector<char> xml_copy(buffer->begin(), buffer->end());
121 xml_copy.push_back(
'\0');
122 doc.parse<parse_declaration_node | parse_no_data_nodes>(&xml_copy[0]);
124 xml_node<>* rootnode = doc.first_node(IDMESSAGE_ROOTNODE);
135 cache = rootnode->first_attribute(IDMESSAGE_VERSIONNODE)->value();
136 if(cache.compare(IDMESSAGE_VERSION_SUPPORTED) == 0 )
140 cache = rootnode->first_attribute(IDMESSAGE_FRAMENODE)->value();
145 cache = rootnode->first_attribute(IDMESSAGE_TIMESTAMPNODE)->value();
148 cache = rootnode->first_attribute(IDMESSAGE_REFERENCENODE)->value();
151 cache = rootnode->first_attribute(IDMESSAGE_DESCRIPTIONNODE)->value();
154 cache = rootnode->first_attribute(IDMESSAGE_FAMILYNODE)->value();
155 if(cache.compare(IDTYPES_FAMILY_BIOSIG) == 0)
161 cache = rootnode->first_attribute(IDMESSAGE_EVENTNODE)->value();
166 else if( cache.compare(IDMESSAGE_VERSION) == 0 )
170 cache = rootnode->first_attribute(IDMESSAGE_FRAMENODE_2)->value();
175 cache = rootnode->first_attribute(IDMESSAGE_TIMESTAMPNODE_2)->value();
178 cache = rootnode->first_attribute(IDMESSAGE_REFERENCENODE_2)->value();
181 cache = rootnode->first_attribute(IDMESSAGE_DESCRIPTIONNODE)->value();
184 cache = rootnode->first_attribute(IDMESSAGE_FAMILYNODE)->value();
185 if(cache.compare(IDTYPES_FAMILY_BIOSIG) == 0)
191 cache = rootnode->first_attribute(IDMESSAGE_EVENTNODE)->value();
194 if(rootnode->first_attribute(IDMESSAGE_SOURCENODE))
197 cache = rootnode->first_attribute(IDMESSAGE_SOURCENODE)->value();
205 std::string info(
"iD version mismatch: ");
206 info.append(IDMESSAGE_VERSION);