14#ifndef PUGIXML_VERSION
16# define PUGIXML_VERSION 190
22#ifndef HEADER_PUGIXML_HPP
23#define HEADER_PUGIXML_HPP
29#if !defined(PUGIXML_NO_XPATH) && !defined(PUGIXML_NO_EXCEPTIONS)
41#ifndef PUGIXML_DEPRECATED
43# define PUGIXML_DEPRECATED __attribute__((deprecated))
44# elif defined(_MSC_VER) && _MSC_VER >= 1300
45# define PUGIXML_DEPRECATED __declspec(deprecated)
47# define PUGIXML_DEPRECATED
58# define PUGIXML_CLASS PUGIXML_API
62#ifndef PUGIXML_FUNCTION
63# define PUGIXML_FUNCTION PUGIXML_API
67#ifndef PUGIXML_HAS_LONG_LONG
68# if __cplusplus >= 201103
69# define PUGIXML_HAS_LONG_LONG
70# elif defined(_MSC_VER) && _MSC_VER >= 1400
71# define PUGIXML_HAS_LONG_LONG
76#ifndef PUGIXML_HAS_MOVE
77# if __cplusplus >= 201103
78# define PUGIXML_HAS_MOVE
79# elif defined(_MSC_VER) && _MSC_VER >= 1600
80# define PUGIXML_HAS_MOVE
85#define PUGIXML_NOEXCEPT
88#ifndef PUGIXML_NOEXCEPT
89# if __cplusplus >= 201103
90# define PUGIXML_NOEXCEPT noexcept
91# elif defined(_MSC_VER) && _MSC_VER >= 1900
92# define PUGIXML_NOEXCEPT noexcept
94# define PUGIXML_NOEXCEPT
100# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT
102# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT PUGIXML_NOEXCEPT
106#ifndef PUGIXML_OVERRIDE
107# if __cplusplus >= 201103
108# define PUGIXML_OVERRIDE override
109# elif defined(_MSC_VER) && _MSC_VER >= 1700
110# define PUGIXML_OVERRIDE override
112# define PUGIXML_OVERRIDE
117#ifdef PUGIXML_WCHAR_MODE
118# define PUGIXML_TEXT(t) L ## t
119# define PUGIXML_CHAR wchar_t
121# define PUGIXML_TEXT(t) t
122# define PUGIXML_CHAR char
130#ifndef PUGIXML_NO_STL
132 typedef std::basic_string<PUGIXML_CHAR, std::char_traits<PUGIXML_CHAR>, std::allocator<PUGIXML_CHAR> >
string_t;
277 #ifndef PUGIXML_NO_XPATH
313 virtual void write(
const void* data,
size_t size) = 0;
329 #ifndef PUGIXML_NO_STL
336 xml_writer_stream(std::basic_ostream<
wchar_t, std::char_traits<wchar_t> >& stream);
342 std::basic_ostream<wchar_t, std::char_traits<wchar_t> >*
wide_stream;
365 operator unspecified_bool_type()
const;
368 bool operator!()
const;
382 const char_t* name()
const;
383 const char_t* value()
const;
389 int as_int(
int def = 0)
const;
391 unsigned int as_uint(
unsigned int def = 0)
const;
393 double as_double(
double def = 0)
const;
395 float as_float(
float def = 0)
const;
397 #ifdef PUGIXML_HAS_LONG_LONG
398 long long as_llong(
long long def = 0)
const;
399 unsigned long long as_ullong(
unsigned long long def = 0)
const;
403 bool as_bool(
bool def =
false)
const;
406 bool set_name(
const char_t* rhs);
407 bool set_value(
const char_t* rhs);
410 bool set_value(
int rhs);
411 bool set_value(
unsigned int rhs);
412 bool set_value(
long rhs);
413 bool set_value(
unsigned long rhs);
414 bool set_value(
double rhs);
415 bool set_value(
float rhs);
416 bool set_value(
bool rhs);
418 #ifdef PUGIXML_HAS_LONG_LONG
419 bool set_value(
long long rhs);
420 bool set_value(
unsigned long long rhs);
433 #ifdef PUGIXML_HAS_LONG_LONG
443 size_t hash_value()
const;
465 typedef void (*unspecified_bool_type)(
xml_node***);
476 operator unspecified_bool_type()
const;
479 bool operator!()
const;
482 bool operator==(
const xml_node& r)
const;
483 bool operator!=(
const xml_node& r)
const;
484 bool operator<(
const xml_node& r)
const;
485 bool operator>(
const xml_node& r)
const;
487 bool operator>=(
const xml_node& r)
const;
496 const char_t* name()
const;
500 const char_t* value()
const;
533 const char_t* child_value()
const;
539 bool set_name(
const char_t* rhs);
540 bool set_value(
const char_t* rhs);
583 bool remove_child(
const xml_node& n);
584 bool remove_child(
const char_t* name);
589 xml_parse_result append_buffer(
const void* contents,
size_t size,
unsigned int options = parse_default,
xml_encoding encoding = encoding_auto);
624 if (pred(cur))
return cur;
643 #ifndef PUGIXML_NO_STL
654 #ifndef PUGIXML_NO_XPATH
672 #ifndef PUGIXML_NO_STL
674 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;
675 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;
696 ptrdiff_t offset_debug()
const;
699 size_t hash_value()
const;
718 typedef void (*unspecified_bool_type)(
xml_text***);
730 operator unspecified_bool_type()
const;
733 bool operator!()
const;
739 const char_t* get()
const;
745 int as_int(
int def = 0)
const;
746 unsigned int as_uint(
unsigned int def = 0)
const;
747 double as_double(
double def = 0)
const;
748 float as_float(
float def = 0)
const;
750 #ifdef PUGIXML_HAS_LONG_LONG
751 long long as_llong(
long long def = 0)
const;
752 unsigned long long as_ullong(
unsigned long long def = 0)
const;
756 bool as_bool(
bool def =
false)
const;
759 bool set(
const char_t* rhs);
763 bool set(
unsigned int rhs);
765 bool set(
unsigned long rhs);
766 bool set(
double rhs);
770 #ifdef PUGIXML_HAS_LONG_LONG
771 bool set(
long long rhs);
772 bool set(
unsigned long long rhs);
785 #ifdef PUGIXML_HAS_LONG_LONG
818 #ifndef PUGIXML_NO_STL
860 #ifndef PUGIXML_NO_STL
896 #ifndef PUGIXML_NO_STL
995 operator bool()
const;
998 const char* description()
const;
1024 #ifdef PUGIXML_HAS_MOVE
1036 #ifndef PUGIXML_NO_STL
1038 xml_parse_result load(std::basic_istream<
char, std::char_traits<char> >& stream,
unsigned int options = parse_default,
xml_encoding encoding = encoding_auto);
1039 xml_parse_result load(std::basic_istream<
wchar_t, std::char_traits<wchar_t> >& stream,
unsigned int options = parse_default);
1053 xml_parse_result load_buffer(
const void* contents,
size_t size,
unsigned int options = parse_default,
xml_encoding encoding = encoding_auto);
1057 xml_parse_result load_buffer_inplace(
void* contents,
size_t size,
unsigned int options = parse_default,
xml_encoding encoding = encoding_auto);
1061 xml_parse_result load_buffer_inplace_own(
void* contents,
size_t size,
unsigned int options = parse_default,
xml_encoding encoding = encoding_auto);
1066 #ifndef PUGIXML_NO_STL
1068 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;
1069 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;
1073 bool save_file(
const char* path,
const char_t* indent =
PUGIXML_TEXT(
"\t"),
unsigned int flags = format_default,
xml_encoding encoding = encoding_auto)
const;
1074 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;
1080#ifndef PUGIXML_NO_XPATH
1104 operator bool()
const;
1107 const char* description()
const;
1127 const char_t* name()
const;
1133 bool get_boolean()
const;
1134 double get_number()
const;
1135 const char_t* get_string()
const;
1139 bool set(
bool value);
1140 bool set(
double value);
1141 bool set(
const char_t* value);
1168 #ifdef PUGIXML_HAS_MOVE
1178 bool set(
const char_t* name,
bool value);
1179 bool set(
const char_t* name,
double value);
1212 #ifdef PUGIXML_HAS_MOVE
1223 bool evaluate_boolean(
const xpath_node& n)
const;
1227 double evaluate_number(
const xpath_node& n)
const;
1229 #ifndef PUGIXML_NO_STL
1239 size_t evaluate_string(
char_t* buffer,
size_t capacity,
const xpath_node& n)
const;
1256 operator unspecified_bool_type()
const;
1259 bool operator!()
const;
1262 #ifndef PUGIXML_NO_EXCEPTIONS
1306 operator unspecified_bool_type()
const;
1309 bool operator!()
const;
1353 #ifdef PUGIXML_HAS_MOVE
1363 size_t size()
const;
1366 const xpath_node& operator[](
size_t index)
const;
1394#ifndef PUGIXML_NO_STL
1396 std::basic_string<char, std::char_traits<char>, std::allocator<char> >
PUGIXML_FUNCTION as_utf8(
const wchar_t* str);
1397 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);
1400 std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >
PUGIXML_FUNCTION as_wide(
const char* str);
1401 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);
1405 typedef void* (*allocation_function)(
size_t size);
1408 typedef void (*deallocation_function)(
void* ptr);
1418#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC))
1428#if !defined(PUGIXML_NO_STL) && defined(__SUNPRO_CC)
1442#if defined(PUGIXML_HEADER_ONLY) && !defined(PUGIXML_SOURCE)
1443# define PUGIXML_SOURCE "pugixml.cpp"
1444# include PUGIXML_SOURCE
auto end() const noexcept
auto begin() const noexcept
名称范围迭代支持
ConcurrentQueue & operator=(ConcurrentQueue const &) MOODYCAMEL_DELETE_FUNCTION
ptrdiff_t difference_type
std::bidirectional_iterator_tag iterator_category
xml_attribute & reference
xml_attribute_struct * _attr
xml_attribute next_attribute() const
xml_document(const xml_document &)
xml_document & operator=(const xml_document &)
void _move(xml_document &rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT
ptrdiff_t difference_type
std::bidirectional_iterator_tag iterator_category
std::bidirectional_iterator_tag iterator_category
ptrdiff_t difference_type
xml_node first_child() const
xml_node next_sibling() const
xml_attribute find_attribute(Predicate pred) const
xml_node find_node(Predicate pred) const
xml_attribute_iterator attribute_iterator
xml_node find_child(Predicate pred) const
xml_node_iterator iterator
xml_object_range(It b, It e)
virtual bool for_each(xml_node &node)=0
std::basic_ostream< wchar_t, std::char_traits< wchar_t > > * wide_stream
std::basic_ostream< char, std::char_traits< char > > * narrow_stream
virtual void write(const void *data, size_t size)=0
xpath_parse_result _result
const xpath_node * const_iterator
const xpath_node * iterator
void _move(xpath_node_set &rhs) PUGIXML_NOEXCEPT
xpath_parse_result _result
xpath_query & operator=(const xpath_query &)
xpath_query(const xpath_query &)
xpath_variable(const xpath_variable &)
xpath_variable & operator=(const xpath_variable &)
const unsigned int format_no_empty_element_tags
std::basic_string< PUGIXML_CHAR, std::char_traits< PUGIXML_CHAR >, std::allocator< PUGIXML_CHAR > > string_t
PUGI__FN deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function()
PUGI__FN allocation_function PUGIXML_FUNCTION get_memory_allocation_function()
const unsigned int format_no_declaration
const unsigned int parse_trim_pcdata
const unsigned int parse_wconv_attribute
const unsigned int format_raw
const unsigned int format_default
void(* deallocation_function)(void *ptr)
const unsigned int parse_cdata
void *(* allocation_function)(size_t size)
PUGI__FN std::string PUGIXML_FUNCTION as_utf8(const wchar_t *str)
const unsigned int parse_fragment
const unsigned int parse_full
const unsigned int parse_embed_pcdata
const unsigned int parse_wnorm_attribute
const unsigned int format_indent_attributes
const unsigned int parse_pi
@ status_append_invalid_root
@ status_end_element_mismatch
@ status_bad_start_element
@ status_unrecognized_tag
@ status_no_document_element
const unsigned int format_save_file_text
const unsigned int parse_escapes
const unsigned int format_write_bom
PUGI__FN void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate)
const unsigned int format_indent
const unsigned int parse_eol
const unsigned int parse_default
const unsigned int parse_declaration
const unsigned int parse_comments
PUGI__FN std::basic_string< wchar_t > PUGIXML_FUNCTION as_wide(const char *str)
const unsigned int parse_ws_pcdata
const unsigned int parse_minimal
const unsigned int parse_ws_pcdata_single
const unsigned int format_no_escapes
const unsigned int parse_doctype
void sort(I begin, I end, const Pred &pred)
void remove_attribute(xml_attribute_struct *attr, xml_node_struct *node)
void reverse(I begin, I end)
void insert_attribute_before(xml_attribute_struct *attr, xml_attribute_struct *place, xml_node_struct *node)
void append_attribute(xml_attribute_struct *attr, xml_node_struct *node)
void prepend_attribute(xml_attribute_struct *attr, xml_node_struct *node)
void insert_attribute_after(xml_attribute_struct *attr, xml_attribute_struct *place, xml_node_struct *node)
#define PUGIXML_DEPRECATED
#define PUGIXML_NOEXCEPT_IF_NOT_COMPACT