25 #include "drwnLogger.h"
30 namespace drwnBase64 {
32 extern const char *LUT;
34 extern const char FILL;
36 extern bool INSERT_NEWLINES;
40 char *encode(
const unsigned char *data,
size_t length);
43 unsigned char *decode(
const char *data);
53 namespace drwnXMLUtils {
55 extern drwnXMLEncoderType DEFAULT_ENCODER;
57 drwnXMLEncoderType getEncoderType(
const char *str);
60 drwnXMLNode& serialize(drwnXMLNode& xml,
const char *buffer,
size_t length);
62 drwnXMLNode& serialize(drwnXMLNode& xml,
const Eigen::VectorXd& v);
64 drwnXMLNode& serialize(drwnXMLNode& xml,
const Eigen::MatrixXd& m);
67 drwnXMLNode& deserialize(drwnXMLNode& xml,
char *buffer,
size_t length);
69 drwnXMLNode& deserialize(drwnXMLNode& xml, Eigen::VectorXd& v);
71 drwnXMLNode& deserialize(drwnXMLNode& xml, Eigen::MatrixXd& m);
75 struct save_node {
void operator()(
const T& o, drwnXMLNode& node) { o.save(node); }; };
79 struct save_node<T *> {
void operator()(T*
const& o, drwnXMLNode& node) { o->save(node); }; };
83 template<
class RandomAccessIterator>
84 void save(drwnXMLNode& xml,
const char *tag,
85 RandomAccessIterator first, RandomAccessIterator last) {
87 while (first != last) {
88 drwnXMLNode *node = xml.document()->allocate_node(rapidxml::node_element,
89 xml.document()->allocate_string(tag));
90 xml.append_node(node);
91 functor(*first, *node);
98 template<
class Container>
99 void save(drwnXMLNode& xml,
const char *tag,
const Container& container) {
100 save(xml, tag, container.begin(), container.end());
105 template<
class Container>
106 void write(
const char *filename,
const char *root,
const char *tag,
107 const Container& container) {
108 DRWN_ASSERT(filename != NULL);
110 drwnXMLNode *node = xml.allocate_node(rapidxml::node_element, xml.allocate_string(root));
111 xml.append_node(node);
112 drwnXMLUtils::save(*node, tag, container);
113 ofstream ofs(filename);
122 T operator()(drwnXMLNode& node) { T o; o.load(node);
return o; };
129 T* operator()(drwnXMLNode& node) { T *o =
new T(); o->load(node);
return o; };
135 template<
class Container>
136 void load(drwnXMLNode& xml,
const char *tag, Container& container) {
137 typename Container::iterator it(container.end());
140 for (drwnXMLNode *node = xml.first_node(tag); node != NULL; node = node->next_sibling(tag)) {
142 it = container.insert(it, functor(*node));
149 template<
class Container>
150 void read(
const char *filename,
const char *root,
const char *tag,
151 Container& container) {
152 DRWN_ASSERT(filename != NULL);
156 load(xml, tag, container);
160 void dump(drwnXMLNode& xml);
_drwnXMLEncoderType
Definition: drwnXMLUtils.h:48
encode binary objects using Base-64
Definition: drwnXMLUtils.h:50
helper class for loading xml nodes into containers of objects
Definition: drwnXMLUtils.h:121
bool drwnIsXMLEmpty(drwnXMLNode &xml)
checks whether an xml document is empty
Definition: drwnXMLParser.cpp:55
drwnXMLNode * drwnParseXMLFile(drwnXMLDoc &xml, const char *filename, const char *tag=NULL)
parse an xml file into xml (loads all data into memory) and return a pointer to the first node (with ...
Definition: drwnXMLParser.cpp:22
encode binary objects as ASCII text
Definition: drwnXMLUtils.h:49
Provides XML parsing functionality for serializing and deserializing objects and containers of object...
helper class for saving objects to xml nodes
Definition: drwnXMLUtils.h:75