19 #ifndef PUGIXML_VERSION
21 # define PUGIXML_VERSION 120
27 #ifndef HEADER_PUGIXML_HPP
28 #define HEADER_PUGIXML_HPP
34 #if !defined(PUGIXML_NO_XPATH) && !defined(PUGIXML_NO_EXCEPTIONS)
39 #ifndef PUGIXML_NO_STL
46 #ifndef PUGIXML_DEPRECATED
47 # if defined(__GNUC__)
48 # define PUGIXML_DEPRECATED __attribute__((deprecated))
49 # elif defined(_MSC_VER) && _MSC_VER >= 1300
50 # define PUGIXML_DEPRECATED __declspec(deprecated)
52 # define PUGIXML_DEPRECATED
63 # define PUGIXML_CLASS PUGIXML_API
67 #ifndef PUGIXML_FUNCTION
68 # define PUGIXML_FUNCTION PUGIXML_API
72 #ifdef PUGIXML_WCHAR_MODE
73 # define PUGIXML_TEXT(t) L ## t
74 # define PUGIXML_CHAR wchar_t
76 # define PUGIXML_TEXT(t) t
77 # define PUGIXML_CHAR char
83 typedef PUGIXML_CHAR char_t;
85 #ifndef PUGIXML_NO_STL
87 typedef std::basic_string<PUGIXML_CHAR, std::char_traits<PUGIXML_CHAR>, std::allocator<PUGIXML_CHAR> > string_t;
112 const unsigned int parse_minimal = 0x0000;
115 const unsigned int parse_pi = 0x0001;
118 const unsigned int parse_comments = 0x0002;
121 const unsigned int parse_cdata = 0x0004;
125 const unsigned int parse_ws_pcdata = 0x0008;
128 const unsigned int parse_escapes = 0x0010;
131 const unsigned int parse_eol = 0x0020;
134 const unsigned int parse_wconv_attribute = 0x0040;
137 const unsigned int parse_wnorm_attribute = 0x0080;
140 const unsigned int parse_declaration = 0x0100;
143 const unsigned int parse_doctype = 0x0200;
148 const unsigned int parse_ws_pcdata_single = 0x0400;
153 const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol;
158 const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype;
178 const unsigned int format_indent = 0x01;
181 const unsigned int format_write_bom = 0x02;
184 const unsigned int format_raw = 0x04;
187 const unsigned int format_no_declaration = 0x08;
190 const unsigned int format_no_escapes = 0x10;
193 const unsigned int format_save_file_text = 0x20;
197 const unsigned int format_default = format_indent;
200 struct xml_attribute_struct;
201 struct xml_node_struct;
203 class xml_node_iterator;
204 class xml_attribute_iterator;
205 class xml_named_node_iterator;
207 class xml_tree_walker;
213 #ifndef PUGIXML_NO_XPATH
215 class xpath_node_set;
217 class xpath_variable_set;
221 template <
typename It>
class xml_object_range
224 typedef It const_iterator;
226 xml_object_range(It b, It e): _begin(b), _end(e)
230 It begin()
const {
return _begin; }
231 It end()
const {
return _end; }
238 class PUGIXML_CLASS xml_writer
241 virtual ~xml_writer() {}
244 virtual void write(
const void* data,
size_t size) = 0;
248 class PUGIXML_CLASS xml_writer_file:
public xml_writer
252 xml_writer_file(
void* file);
254 virtual void write(
const void* data,
size_t size);
260 #ifndef PUGIXML_NO_STL
262 class PUGIXML_CLASS xml_writer_stream:
public xml_writer
266 xml_writer_stream(std::basic_ostream<
char, std::char_traits<char> >& stream);
267 xml_writer_stream(std::basic_ostream<
wchar_t, std::char_traits<wchar_t> >& stream);
269 virtual void write(
const void* data,
size_t size);
272 std::basic_ostream<char, std::char_traits<char> >* narrow_stream;
273 std::basic_ostream<wchar_t, std::char_traits<wchar_t> >* wide_stream;
278 class PUGIXML_CLASS xml_attribute
280 friend class xml_attribute_iterator;
281 friend class xml_node;
284 xml_attribute_struct* _attr;
286 typedef void (*unspecified_bool_type)(xml_attribute***);
293 explicit xml_attribute(xml_attribute_struct* attr);
296 operator unspecified_bool_type()
const;
299 bool operator!()
const;
302 bool operator==(
const xml_attribute& r)
const;
303 bool operator!=(
const xml_attribute& r)
const;
304 bool operator<(
const xml_attribute& r)
const;
305 bool operator>(
const xml_attribute& r)
const;
306 bool operator<=(
const xml_attribute& r)
const;
307 bool operator>=(
const xml_attribute& r)
const;
313 const char_t* name()
const;
314 const char_t* value()
const;
317 const char_t* as_string(
const char_t* def = PUGIXML_TEXT(
""))
const;
320 int as_int(
int def = 0)
const;
321 unsigned int as_uint(
unsigned int def = 0)
const;
322 double as_double(
double def = 0)
const;
323 float as_float(
float def = 0)
const;
326 bool as_bool(
bool def =
false)
const;
329 bool set_name(
const char_t* rhs);
330 bool set_value(
const char_t* rhs);
333 bool set_value(
int rhs);
334 bool set_value(
unsigned int rhs);
335 bool set_value(
double rhs);
336 bool set_value(
bool rhs);
339 xml_attribute& operator=(
const char_t* rhs);
340 xml_attribute& operator=(
int rhs);
341 xml_attribute& operator=(
unsigned int rhs);
342 xml_attribute& operator=(
double rhs);
343 xml_attribute& operator=(
bool rhs);
346 xml_attribute next_attribute()
const;
347 xml_attribute previous_attribute()
const;
350 size_t hash_value()
const;
353 xml_attribute_struct* internal_object()
const;
358 bool PUGIXML_FUNCTION operator&&(
const xml_attribute& lhs,
bool rhs);
359 bool PUGIXML_FUNCTION operator||(
const xml_attribute& lhs,
bool rhs);
363 class PUGIXML_CLASS xml_node
365 friend class xml_attribute_iterator;
366 friend class xml_node_iterator;
367 friend class xml_named_node_iterator;
370 xml_node_struct* _root;
372 typedef void (*unspecified_bool_type)(xml_node***);
379 explicit xml_node(xml_node_struct* p);
382 operator unspecified_bool_type()
const;
385 bool operator!()
const;
388 bool operator==(
const xml_node& r)
const;
389 bool operator!=(
const xml_node& r)
const;
390 bool operator<(
const xml_node& r)
const;
391 bool operator>(
const xml_node& r)
const;
392 bool operator<=(
const xml_node& r)
const;
393 bool operator>=(
const xml_node& r)
const;
399 xml_node_type type()
const;
402 const char_t* name()
const;
403 const char_t* value()
const;
406 xml_attribute first_attribute()
const;
407 xml_attribute last_attribute()
const;
410 xml_node first_child()
const;
411 xml_node last_child()
const;
414 xml_node next_sibling()
const;
415 xml_node previous_sibling()
const;
418 xml_node parent()
const;
421 xml_node root()
const;
424 xml_text text()
const;
427 xml_node child(
const char_t* name)
const;
428 xml_attribute attribute(
const char_t* name)
const;
429 xml_node next_sibling(
const char_t* name)
const;
430 xml_node previous_sibling(
const char_t* name)
const;
433 const char_t* child_value()
const;
436 const char_t* child_value(
const char_t* name)
const;
439 bool set_name(
const char_t* rhs);
440 bool set_value(
const char_t* rhs);
443 xml_attribute append_attribute(
const char_t* name);
444 xml_attribute prepend_attribute(
const char_t* name);
445 xml_attribute insert_attribute_after(
const char_t* name,
const xml_attribute& attr);
446 xml_attribute insert_attribute_before(
const char_t* name,
const xml_attribute& attr);
449 xml_attribute append_copy(
const xml_attribute& proto);
450 xml_attribute prepend_copy(
const xml_attribute& proto);
451 xml_attribute insert_copy_after(
const xml_attribute& proto,
const xml_attribute& attr);
452 xml_attribute insert_copy_before(
const xml_attribute& proto,
const xml_attribute& attr);
455 xml_node append_child(xml_node_type type = node_element);
456 xml_node prepend_child(xml_node_type type = node_element);
457 xml_node insert_child_after(xml_node_type type,
const xml_node& node);
458 xml_node insert_child_before(xml_node_type type,
const xml_node& node);
461 xml_node append_child(
const char_t* name);
462 xml_node prepend_child(
const char_t* name);
463 xml_node insert_child_after(
const char_t* name,
const xml_node& node);
464 xml_node insert_child_before(
const char_t* name,
const xml_node& node);
467 xml_node append_copy(
const xml_node& proto);
468 xml_node prepend_copy(
const xml_node& proto);
469 xml_node insert_copy_after(
const xml_node& proto,
const xml_node& node);
470 xml_node insert_copy_before(
const xml_node& proto,
const xml_node& node);
473 bool remove_attribute(
const xml_attribute& a);
474 bool remove_attribute(
const char_t* name);
477 bool remove_child(
const xml_node& n);
478 bool remove_child(
const char_t* name);
481 template <
typename Predicate> xml_attribute find_attribute(Predicate pred)
const
483 if (!_root)
return xml_attribute();
485 for (xml_attribute attrib = first_attribute(); attrib; attrib = attrib.next_attribute())
489 return xml_attribute();
493 template <
typename Predicate> xml_node find_child(Predicate pred)
const
495 if (!_root)
return xml_node();
497 for (xml_node node = first_child(); node; node = node.next_sibling())
505 template <
typename Predicate> xml_node find_node(Predicate pred)
const
507 if (!_root)
return xml_node();
509 xml_node cur = first_child();
511 while (cur._root && cur._root != _root)
513 if (pred(cur))
return cur;
515 if (cur.first_child()) cur = cur.first_child();
516 else if (cur.next_sibling()) cur = cur.next_sibling();
519 while (!cur.next_sibling() && cur._root != _root) cur = cur.parent();
521 if (cur._root != _root) cur = cur.next_sibling();
529 xml_node find_child_by_attribute(
const char_t* name,
const char_t* attr_name,
const char_t* attr_value)
const;
530 xml_node find_child_by_attribute(
const char_t* attr_name,
const char_t* attr_value)
const;
532 #ifndef PUGIXML_NO_STL
534 string_t path(char_t delimiter =
'/')
const;
538 xml_node first_element_by_path(
const char_t* path, char_t delimiter =
'/')
const;
541 bool traverse(xml_tree_walker& walker);
543 #ifndef PUGIXML_NO_XPATH
545 xpath_node select_single_node(
const char_t* query, xpath_variable_set* variables = 0)
const;
546 xpath_node select_single_node(
const xpath_query& query)
const;
549 xpath_node_set select_nodes(
const char_t* query, xpath_variable_set* variables = 0)
const;
550 xpath_node_set select_nodes(
const xpath_query& query)
const;
554 void print(xml_writer& writer,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default, xml_encoding encoding = encoding_auto,
unsigned int depth = 0)
const;
556 #ifndef PUGIXML_NO_STL
558 void print(std::basic_ostream<
char, std::char_traits<char> >& os,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default, xml_encoding encoding = encoding_auto,
unsigned int depth = 0)
const;
559 void print(std::basic_ostream<
wchar_t, std::char_traits<wchar_t> >& os,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default,
unsigned int depth = 0)
const;
563 typedef xml_node_iterator iterator;
565 iterator begin()
const;
566 iterator end()
const;
569 typedef xml_attribute_iterator attribute_iterator;
571 attribute_iterator attributes_begin()
const;
572 attribute_iterator attributes_end()
const;
575 xml_object_range<xml_node_iterator> children()
const;
576 xml_object_range<xml_named_node_iterator> children(
const char_t* name)
const;
577 xml_object_range<xml_attribute_iterator> attributes()
const;
580 ptrdiff_t offset_debug()
const;
583 size_t hash_value()
const;
586 xml_node_struct* internal_object()
const;
591 bool PUGIXML_FUNCTION operator&&(
const xml_node& lhs,
bool rhs);
592 bool PUGIXML_FUNCTION operator||(
const xml_node& lhs,
bool rhs);
596 class PUGIXML_CLASS xml_text
598 friend class xml_node;
600 xml_node_struct* _root;
602 typedef void (*unspecified_bool_type)(xml_text***);
604 explicit xml_text(xml_node_struct* root);
606 xml_node_struct* _data_new();
607 xml_node_struct* _data()
const;
614 operator unspecified_bool_type()
const;
617 bool operator!()
const;
623 const char_t*
get()
const;
626 const char_t* as_string(
const char_t* def = PUGIXML_TEXT(
""))
const;
629 int as_int(
int def = 0)
const;
630 unsigned int as_uint(
unsigned int def = 0)
const;
631 double as_double(
double def = 0)
const;
632 float as_float(
float def = 0)
const;
635 bool as_bool(
bool def =
false)
const;
638 bool set(
const char_t* rhs);
642 bool set(
unsigned int rhs);
643 bool set(
double rhs);
647 xml_text& operator=(
const char_t* rhs);
648 xml_text& operator=(
int rhs);
649 xml_text& operator=(
unsigned int rhs);
650 xml_text& operator=(
double rhs);
651 xml_text& operator=(
bool rhs);
654 xml_node data()
const;
659 bool PUGIXML_FUNCTION operator&&(
const xml_text& lhs,
bool rhs);
660 bool PUGIXML_FUNCTION operator||(
const xml_text& lhs,
bool rhs);
664 class PUGIXML_CLASS xml_node_iterator
666 friend class xml_node;
669 mutable xml_node _wrap;
672 xml_node_iterator(xml_node_struct* ref, xml_node_struct* parent);
676 typedef ptrdiff_t difference_type;
677 typedef xml_node value_type;
678 typedef xml_node* pointer;
679 typedef xml_node& reference;
681 #ifndef PUGIXML_NO_STL
682 typedef std::bidirectional_iterator_tag iterator_category;
689 xml_node_iterator(
const xml_node& node);
692 bool operator==(
const xml_node_iterator& rhs)
const;
693 bool operator!=(
const xml_node_iterator& rhs)
const;
696 xml_node* operator->()
const;
698 const xml_node_iterator& operator++();
699 xml_node_iterator operator++(
int);
701 const xml_node_iterator& operator--();
702 xml_node_iterator operator--(
int);
706 class PUGIXML_CLASS xml_attribute_iterator
708 friend class xml_node;
711 mutable xml_attribute _wrap;
714 xml_attribute_iterator(xml_attribute_struct* ref, xml_node_struct* parent);
718 typedef ptrdiff_t difference_type;
719 typedef xml_attribute value_type;
720 typedef xml_attribute* pointer;
721 typedef xml_attribute& reference;
723 #ifndef PUGIXML_NO_STL
724 typedef std::bidirectional_iterator_tag iterator_category;
728 xml_attribute_iterator();
731 xml_attribute_iterator(
const xml_attribute& attr,
const xml_node& parent);
734 bool operator==(
const xml_attribute_iterator& rhs)
const;
735 bool operator!=(
const xml_attribute_iterator& rhs)
const;
738 xml_attribute* operator->()
const;
740 const xml_attribute_iterator& operator++();
741 xml_attribute_iterator operator++(
int);
743 const xml_attribute_iterator& operator--();
744 xml_attribute_iterator operator--(
int);
748 class xml_named_node_iterator
752 typedef ptrdiff_t difference_type;
753 typedef xml_node value_type;
754 typedef xml_node* pointer;
755 typedef xml_node& reference;
757 #ifndef PUGIXML_NO_STL
758 typedef std::forward_iterator_tag iterator_category;
762 xml_named_node_iterator();
765 xml_named_node_iterator(
const xml_node& node,
const char_t* name);
768 bool operator==(
const xml_named_node_iterator& rhs)
const;
769 bool operator!=(
const xml_named_node_iterator& rhs)
const;
772 xml_node* operator->()
const;
774 const xml_named_node_iterator& operator++();
775 xml_named_node_iterator operator++(
int);
778 mutable xml_node _node;
783 class PUGIXML_CLASS xml_tree_walker
785 friend class xml_node;
796 virtual ~xml_tree_walker();
799 virtual bool begin(xml_node& node);
802 virtual bool for_each(xml_node& node) = 0;
805 virtual bool end(xml_node& node);
809 enum xml_parse_status
813 status_file_not_found,
815 status_out_of_memory,
816 status_internal_error,
818 status_unrecognized_tag,
825 status_bad_start_element,
826 status_bad_attribute,
827 status_bad_end_element,
828 status_end_element_mismatch
832 struct PUGIXML_CLASS xml_parse_result
835 xml_parse_status status;
841 xml_encoding encoding;
847 operator bool()
const;
850 const char* description()
const;
854 class PUGIXML_CLASS xml_document:
public xml_node
862 xml_document(
const xml_document&);
863 const xml_document& operator=(
const xml_document&);
868 xml_parse_result load_buffer_impl(
void* contents,
size_t size,
unsigned int options, xml_encoding encoding,
bool is_mutable,
bool own);
881 void reset(
const xml_document& proto);
883 #ifndef PUGIXML_NO_STL
885 xml_parse_result load(std::basic_istream<
char, std::char_traits<char> >& stream,
unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
886 xml_parse_result load(std::basic_istream<
wchar_t, std::char_traits<wchar_t> >& stream,
unsigned int options = parse_default);
890 xml_parse_result load(
const char_t* contents,
unsigned int options = parse_default);
893 xml_parse_result load_file(
const char* path,
unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
894 xml_parse_result load_file(
const wchar_t* path,
unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
897 xml_parse_result load_buffer(
const void* contents,
size_t size,
unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
901 xml_parse_result load_buffer_inplace(
void* contents,
size_t size,
unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
905 xml_parse_result load_buffer_inplace_own(
void* contents,
size_t size,
unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
908 void save(xml_writer& writer,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default, xml_encoding encoding = encoding_auto)
const;
910 #ifndef PUGIXML_NO_STL
912 void save(std::basic_ostream<
char, std::char_traits<char> >& stream,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default, xml_encoding encoding = encoding_auto)
const;
913 void save(std::basic_ostream<
wchar_t, std::char_traits<wchar_t> >& stream,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default)
const;
917 bool save_file(
const char* path,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default, xml_encoding encoding = encoding_auto)
const;
918 bool save_file(
const wchar_t* path,
const char_t* indent = PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default, xml_encoding encoding = encoding_auto)
const;
921 xml_node document_element()
const;
924 #ifndef PUGIXML_NO_XPATH
926 enum xpath_value_type
936 struct PUGIXML_CLASS xpath_parse_result
945 xpath_parse_result();
948 operator bool()
const;
951 const char* description()
const;
955 class PUGIXML_CLASS xpath_variable
957 friend class xpath_variable_set;
960 xpath_value_type _type;
961 xpath_variable* _next;
966 xpath_variable(
const xpath_variable&);
967 xpath_variable& operator=(
const xpath_variable&);
971 const char_t* name()
const;
974 xpath_value_type type()
const;
977 bool get_boolean()
const;
978 double get_number()
const;
979 const char_t* get_string()
const;
980 const xpath_node_set& get_node_set()
const;
983 bool set(
bool value);
984 bool set(
double value);
985 bool set(
const char_t* value);
986 bool set(
const xpath_node_set& value);
990 class PUGIXML_CLASS xpath_variable_set
993 xpath_variable* _data[64];
996 xpath_variable_set(
const xpath_variable_set&);
997 xpath_variable_set& operator=(
const xpath_variable_set&);
999 xpath_variable* find(
const char_t* name)
const;
1003 xpath_variable_set();
1004 ~xpath_variable_set();
1007 xpath_variable* add(
const char_t* name, xpath_value_type type);
1010 bool set(
const char_t* name,
bool value);
1011 bool set(
const char_t* name,
double value);
1012 bool set(
const char_t* name,
const char_t* value);
1013 bool set(
const char_t* name,
const xpath_node_set& value);
1016 xpath_variable*
get(
const char_t* name);
1017 const xpath_variable*
get(
const char_t* name)
const;
1021 class PUGIXML_CLASS xpath_query
1025 xpath_parse_result _result;
1027 typedef void (*unspecified_bool_type)(xpath_query***);
1030 xpath_query(
const xpath_query&);
1031 xpath_query& operator=(
const xpath_query&);
1036 explicit xpath_query(
const char_t* query, xpath_variable_set* variables = 0);
1042 xpath_value_type return_type()
const;
1046 bool evaluate_boolean(
const xpath_node& n)
const;
1050 double evaluate_number(
const xpath_node& n)
const;
1052 #ifndef PUGIXML_NO_STL
1055 string_t evaluate_string(
const xpath_node& n)
const;
1062 size_t evaluate_string(char_t* buffer,
size_t capacity,
const xpath_node& n)
const;
1067 xpath_node_set evaluate_node_set(
const xpath_node& n)
const;
1070 const xpath_parse_result& result()
const;
1073 operator unspecified_bool_type()
const;
1076 bool operator!()
const;
1079 #ifndef PUGIXML_NO_EXCEPTIONS
1081 class PUGIXML_CLASS xpath_exception:
public std::exception
1084 xpath_parse_result _result;
1088 explicit xpath_exception(
const xpath_parse_result& result);
1091 virtual const char* what()
const throw();
1094 const xpath_parse_result& result() const;
1099 class PUGIXML_CLASS xpath_node
1103 xml_attribute _attribute;
1105 typedef void (*unspecified_bool_type)(xpath_node***);
1112 xpath_node(
const xml_node& node);
1113 xpath_node(
const xml_attribute& attribute,
const xml_node& parent);
1116 xml_node node()
const;
1117 xml_attribute attribute()
const;
1120 xml_node parent()
const;
1123 operator unspecified_bool_type()
const;
1126 bool operator!()
const;
1129 bool operator==(
const xpath_node& n)
const;
1130 bool operator!=(
const xpath_node& n)
const;
1135 bool PUGIXML_FUNCTION operator&&(
const xpath_node& lhs,
bool rhs);
1136 bool PUGIXML_FUNCTION operator||(
const xpath_node& lhs,
bool rhs);
1140 class PUGIXML_CLASS xpath_node_set
1152 typedef const xpath_node* const_iterator;
1158 xpath_node_set(const_iterator begin, const_iterator end, type_t type = type_unsorted);
1164 xpath_node_set(
const xpath_node_set& ns);
1165 xpath_node_set& operator=(
const xpath_node_set& ns);
1168 type_t type()
const;
1171 size_t size()
const;
1174 const xpath_node& operator[](
size_t index)
const;
1177 const_iterator begin()
const;
1178 const_iterator end()
const;
1181 void sort(
bool reverse =
false);
1184 xpath_node first()
const;
1192 xpath_node _storage;
1197 void _assign(const_iterator begin, const_iterator end);
1201 #ifndef PUGIXML_NO_STL
1203 std::basic_string<char, std::char_traits<char>, std::allocator<char> > PUGIXML_FUNCTION as_utf8(
const wchar_t* str);
1204 std::basic_string<char, std::char_traits<char>, std::allocator<char> > PUGIXML_FUNCTION as_utf8(
const std::basic_string<
wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >& str);
1207 std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > PUGIXML_FUNCTION as_wide(
const char* str);
1208 std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> > PUGIXML_FUNCTION as_wide(
const std::basic_string<
char, std::char_traits<char>, std::allocator<char> >& str);
1212 typedef void* (*allocation_function)(
size_t size);
1215 typedef void (*deallocation_function)(
void* ptr);
1218 void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate);
1221 allocation_function PUGIXML_FUNCTION get_memory_allocation_function();
1222 deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function();
1225 #if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC))
1229 std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(
const pugi::xml_node_iterator&);
1230 std::bidirectional_iterator_tag PUGIXML_FUNCTION _Iter_cat(
const pugi::xml_attribute_iterator&);
1231 std::forward_iterator_tag PUGIXML_FUNCTION _Iter_cat(
const pugi::xml_named_node_iterator&);
1235 #if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC)
1239 std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(
const pugi::xml_node_iterator&);
1240 std::bidirectional_iterator_tag PUGIXML_FUNCTION __iterator_category(
const pugi::xml_attribute_iterator&);
1241 std::forward_iterator_tag PUGIXML_FUNCTION __iterator_category(
const pugi::xml_named_node_iterator&);
Mezzanine::Vector3 operator*(const btVector3 &Vec, const Mezzanine::Vector3 &lhs)
Right Hand Multiplication Operator for Bullet Vectors with a Mezzanine::Vector3.
To allow this test harness to be used without the mezzanine it uses pugixml for xml parsing and this ...