Whitespace-only change: set noexpandtab & retab!

git-svn-id: http://pugixml.googlecode.com/svn/trunk@896 99668b35-9821-0410-8761-19e4c4f06640
This commit is contained in:
arseny.kapoulkine@gmail.com 2012-04-03 04:58:11 +00:00
parent cb1d83d32a
commit 7d18b33292
2 changed files with 1092 additions and 1092 deletions

File diff suppressed because it is too large Load Diff

View File

@ -13,7 +13,7 @@
#ifndef PUGIXML_VERSION #ifndef PUGIXML_VERSION
// Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons // Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons
# define PUGIXML_VERSION 100 # define PUGIXML_VERSION 100
#endif #endif
// Include user configuration file (this can define various configuration macros) // Include user configuration file (this can define various configuration macros)
@ -32,9 +32,9 @@
// Include STL headers // Include STL headers
#ifndef PUGIXML_NO_STL #ifndef PUGIXML_NO_STL
# include <iterator> # include <iterator>
# include <iosfwd> # include <iosfwd>
# include <string> # include <string>
#endif #endif
// Macro for deprecated features // Macro for deprecated features
@ -50,17 +50,17 @@
// If no API is defined, assume default // If no API is defined, assume default
#ifndef PUGIXML_API #ifndef PUGIXML_API
# define PUGIXML_API # define PUGIXML_API
#endif #endif
// If no API for classes is defined, assume default // If no API for classes is defined, assume default
#ifndef PUGIXML_CLASS #ifndef PUGIXML_CLASS
# define PUGIXML_CLASS PUGIXML_API # define PUGIXML_CLASS PUGIXML_API
#endif #endif
// If no API for functions is defined, assume default // If no API for functions is defined, assume default
#ifndef PUGIXML_FUNCTION #ifndef PUGIXML_FUNCTION
# define PUGIXML_FUNCTION PUGIXML_API # define PUGIXML_FUNCTION PUGIXML_API
#endif #endif
// Character interface macros // Character interface macros
@ -89,7 +89,7 @@ namespace pugi
// Tree node types // Tree node types
enum xml_node_type enum xml_node_type
{ {
node_null, // Empty (null) node handle node_null, // Empty (null) node handle
node_document, // A document tree's absolute root node_document, // A document tree's absolute root
node_element, // Element tag, i.e. '<node/>' node_element, // Element tag, i.e. '<node/>'
node_pcdata, // Plain character data, i.e. 'text' node_pcdata, // Plain character data, i.e. 'text'
@ -97,13 +97,13 @@ namespace pugi
node_comment, // Comment tag, i.e. '<!-- text -->' node_comment, // Comment tag, i.e. '<!-- text -->'
node_pi, // Processing instruction, i.e. '<?name?>' node_pi, // Processing instruction, i.e. '<?name?>'
node_declaration, // Document declaration, i.e. '<?xml version="1.0"?>' node_declaration, // Document declaration, i.e. '<?xml version="1.0"?>'
node_doctype // Document type declaration, i.e. '<!DOCTYPE doc>' node_doctype // Document type declaration, i.e. '<!DOCTYPE doc>'
}; };
// Parsing options // Parsing options
// Minimal parsing mode (equivalent to turning all other flags off). // Minimal parsing mode (equivalent to turning all other flags off).
// Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed. // Only elements and PCDATA sections are added to the DOM tree, no text conversions are performed.
const unsigned int parse_minimal = 0x0000; const unsigned int parse_minimal = 0x0000;
// This flag determines if processing instructions (node_pi) are added to the DOM tree. This flag is off by default. // This flag determines if processing instructions (node_pi) are added to the DOM tree. This flag is off by default.
@ -116,7 +116,7 @@ namespace pugi
const unsigned int parse_cdata = 0x0004; const unsigned int parse_cdata = 0x0004;
// This flag determines if plain character data (node_pcdata) that consist only of whitespace are added to the DOM tree. // This flag determines if plain character data (node_pcdata) that consist only of whitespace are added to the DOM tree.
// This flag is off by default; turning it on usually results in slower parsing and more memory consumption. // This flag is off by default; turning it on usually results in slower parsing and more memory consumption.
const unsigned int parse_ws_pcdata = 0x0008; const unsigned int parse_ws_pcdata = 0x0008;
// This flag determines if character and entity references are expanded during parsing. This flag is on by default. // This flag determines if character and entity references are expanded during parsing. This flag is on by default.
@ -125,46 +125,46 @@ namespace pugi
// This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default. // This flag determines if EOL characters are normalized (converted to #xA) during parsing. This flag is on by default.
const unsigned int parse_eol = 0x0020; const unsigned int parse_eol = 0x0020;
// This flag determines if attribute values are normalized using CDATA normalization rules during parsing. This flag is on by default. // This flag determines if attribute values are normalized using CDATA normalization rules during parsing. This flag is on by default.
const unsigned int parse_wconv_attribute = 0x0040; const unsigned int parse_wconv_attribute = 0x0040;
// This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. This flag is off by default. // This flag determines if attribute values are normalized using NMTOKENS normalization rules during parsing. This flag is off by default.
const unsigned int parse_wnorm_attribute = 0x0080; const unsigned int parse_wnorm_attribute = 0x0080;
// This flag determines if document declaration (node_declaration) is added to the DOM tree. This flag is off by default. // This flag determines if document declaration (node_declaration) is added to the DOM tree. This flag is off by default.
const unsigned int parse_declaration = 0x0100; const unsigned int parse_declaration = 0x0100;
// This flag determines if document type declaration (node_doctype) is added to the DOM tree. This flag is off by default. // This flag determines if document type declaration (node_doctype) is added to the DOM tree. This flag is off by default.
const unsigned int parse_doctype = 0x0200; const unsigned int parse_doctype = 0x0200;
// This flag determines if plain character data (node_pcdata) that is the only child of the parent node and that consists only // This flag determines if plain character data (node_pcdata) that is the only child of the parent node and that consists only
// of whitespace is added to the DOM tree. // of whitespace is added to the DOM tree.
// This flag is off by default; turning it on may result in slower parsing and more memory consumption. // This flag is off by default; turning it on may result in slower parsing and more memory consumption.
const unsigned int parse_ws_pcdata_single = 0x0400; const unsigned int parse_ws_pcdata_single = 0x0400;
// The default parsing mode. // The default parsing mode.
// Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded, // Elements, PCDATA and CDATA sections are added to the DOM tree, character/reference entities are expanded,
// End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules.
const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol; const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol;
// The full parsing mode. // The full parsing mode.
// Nodes of all types are added to the DOM tree, character/reference entities are expanded, // Nodes of all types are added to the DOM tree, character/reference entities are expanded,
// End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules. // End-of-Line characters are normalized, attribute values are normalized using CDATA normalization rules.
const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype; const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype;
// These flags determine the encoding of input data for XML document // These flags determine the encoding of input data for XML document
enum xml_encoding enum xml_encoding
{ {
encoding_auto, // Auto-detect input encoding using BOM or < / <? detection; use UTF8 if BOM is not found encoding_auto, // Auto-detect input encoding using BOM or < / <? detection; use UTF8 if BOM is not found
encoding_utf8, // UTF8 encoding encoding_utf8, // UTF8 encoding
encoding_utf16_le, // Little-endian UTF16 encoding_utf16_le, // Little-endian UTF16
encoding_utf16_be, // Big-endian UTF16 encoding_utf16_be, // Big-endian UTF16
encoding_utf16, // UTF16 with native endianness encoding_utf16, // UTF16 with native endianness
encoding_utf32_le, // Little-endian UTF32 encoding_utf32_le, // Little-endian UTF32
encoding_utf32_be, // Big-endian UTF32 encoding_utf32_be, // Big-endian UTF32
encoding_utf32, // UTF32 with native endianness encoding_utf32, // UTF32 with native endianness
encoding_wchar, // The same encoding wchar_t has (either UTF16 or UTF32) encoding_wchar, // The same encoding wchar_t has (either UTF16 or UTF32)
encoding_latin1 encoding_latin1
}; };
// Formatting flags // Formatting flags
@ -181,14 +181,14 @@ namespace pugi
// Omit default XML declaration even if there is no declaration in the document. This flag is off by default. // Omit default XML declaration even if there is no declaration in the document. This flag is off by default.
const unsigned int format_no_declaration = 0x08; const unsigned int format_no_declaration = 0x08;
// Don't escape attribute values and PCDATA contents. This flag is off by default. // Don't escape attribute values and PCDATA contents. This flag is off by default.
const unsigned int format_no_escapes = 0x10; const unsigned int format_no_escapes = 0x10;
// Open file using text mode in xml_document::save_file. This enables special character (i.e. new-line) conversions on some systems. This flag is off by default. // Open file using text mode in xml_document::save_file. This enables special character (i.e. new-line) conversions on some systems. This flag is off by default.
const unsigned int format_save_file_text = 0x20; const unsigned int format_save_file_text = 0x20;
// The default set of formatting flags. // The default set of formatting flags.
// Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none. // Nodes are indented depending on their depth in DOM tree, a default declaration is output if document has none.
const unsigned int format_default = format_indent; const unsigned int format_default = format_indent;
// Forward declarations // Forward declarations
@ -197,13 +197,13 @@ namespace pugi
class xml_node_iterator; class xml_node_iterator;
class xml_attribute_iterator; class xml_attribute_iterator;
class xml_named_node_iterator; class xml_named_node_iterator;
class xml_tree_walker; class xml_tree_walker;
class xml_node; class xml_node;
class xml_text; class xml_text;
#ifndef PUGIXML_NO_XPATH #ifndef PUGIXML_NO_XPATH
class xpath_node; class xpath_node;
@ -212,22 +212,22 @@ namespace pugi
class xpath_variable_set; class xpath_variable_set;
#endif #endif
// Range-based for loop support // Range-based for loop support
template <typename It> class xml_object_range template <typename It> class xml_object_range
{ {
public: public:
typedef It const_iterator; typedef It const_iterator;
xml_object_range(It b, It e): _begin(b), _end(e) xml_object_range(It b, It e): _begin(b), _end(e)
{ {
} }
It begin() const { return _begin; } It begin() const { return _begin; }
It end() const { return _end; } It end() const { return _end; }
private: private:
It _begin, _end; It _begin, _end;
}; };
// Writer interface for node printing (see xml_node::print) // Writer interface for node printing (see xml_node::print)
class PUGIXML_CLASS xml_writer class PUGIXML_CLASS xml_writer
@ -243,7 +243,7 @@ namespace pugi
class PUGIXML_CLASS xml_writer_file: public xml_writer class PUGIXML_CLASS xml_writer_file: public xml_writer
{ {
public: public:
// Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio // Construct writer from a FILE* object; void* is used to avoid header dependencies on stdio
xml_writer_file(void* file); xml_writer_file(void* file);
virtual void write(const void* data, size_t size); virtual void write(const void* data, size_t size);
@ -257,7 +257,7 @@ namespace pugi
class PUGIXML_CLASS xml_writer_stream: public xml_writer class PUGIXML_CLASS xml_writer_stream: public xml_writer
{ {
public: public:
// Construct writer from an output stream object // Construct writer from an output stream object
xml_writer_stream(std::basic_ostream<char, std::char_traits<char> >& stream); xml_writer_stream(std::basic_ostream<char, std::char_traits<char> >& stream);
xml_writer_stream(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& stream); xml_writer_stream(std::basic_ostream<wchar_t, std::char_traits<wchar_t> >& stream);
@ -278,20 +278,20 @@ namespace pugi
private: private:
xml_attribute_struct* _attr; xml_attribute_struct* _attr;
typedef void (*unspecified_bool_type)(xml_attribute***); typedef void (*unspecified_bool_type)(xml_attribute***);
public: public:
// Default constructor. Constructs an empty attribute. // Default constructor. Constructs an empty attribute.
xml_attribute(); xml_attribute();
// Constructs attribute from internal pointer // Constructs attribute from internal pointer
explicit xml_attribute(xml_attribute_struct* attr); explicit xml_attribute(xml_attribute_struct* attr);
// Safe bool conversion operator // Safe bool conversion operator
operator unspecified_bool_type() const; operator unspecified_bool_type() const;
// Borland C++ workaround // Borland C++ workaround
bool operator!() const; bool operator!() const;
// Comparison operators (compares wrapped attribute pointers) // Comparison operators (compares wrapped attribute pointers)
bool operator==(const xml_attribute& r) const; bool operator==(const xml_attribute& r) const;
@ -309,7 +309,7 @@ namespace pugi
const char_t* value() const; const char_t* value() const;
// Get attribute value, or the default value if attribute is empty // Get attribute value, or the default value if attribute is empty
const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const;
// Get attribute value as a number, or the default value if conversion did not succeed or attribute is empty // Get attribute value as a number, or the default value if conversion did not succeed or attribute is empty
int as_int(int def = 0) const; int as_int(int def = 0) const;
@ -317,14 +317,14 @@ namespace pugi
double as_double(double def = 0) const; double as_double(double def = 0) const;
float as_float(float def = 0) const; float as_float(float def = 0) const;
// Get attribute value as bool (returns true if first character is in '1tTyY' set), or the default value if attribute is empty // Get attribute value as bool (returns true if first character is in '1tTyY' set), or the default value if attribute is empty
bool as_bool(bool def = false) const; bool as_bool(bool def = false) const;
// Set attribute name/value (returns false if attribute is empty or there is not enough memory) // Set attribute name/value (returns false if attribute is empty or there is not enough memory)
bool set_name(const char_t* rhs); bool set_name(const char_t* rhs);
bool set_value(const char_t* rhs); bool set_value(const char_t* rhs);
// Set attribute value with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") // Set attribute value with type conversion (numbers are converted to strings, boolean is converted to "true"/"false")
bool set_value(int rhs); bool set_value(int rhs);
bool set_value(unsigned int rhs); bool set_value(unsigned int rhs);
bool set_value(double rhs); bool set_value(double rhs);
@ -337,12 +337,12 @@ namespace pugi
xml_attribute& operator=(double rhs); xml_attribute& operator=(double rhs);
xml_attribute& operator=(bool rhs); xml_attribute& operator=(bool rhs);
// Get next/previous attribute in the attribute list of the parent node // Get next/previous attribute in the attribute list of the parent node
xml_attribute next_attribute() const; xml_attribute next_attribute() const;
xml_attribute previous_attribute() const; xml_attribute previous_attribute() const;
// Get hash value (unique for handles to the same object) // Get hash value (unique for handles to the same object)
size_t hash_value() const; size_t hash_value() const;
// Get internal pointer // Get internal pointer
xml_attribute_struct* internal_object() const; xml_attribute_struct* internal_object() const;
@ -363,16 +363,16 @@ namespace pugi
protected: protected:
xml_node_struct* _root; xml_node_struct* _root;
typedef void (*unspecified_bool_type)(xml_node***); typedef void (*unspecified_bool_type)(xml_node***);
public: public:
// Default constructor. Constructs an empty node. // Default constructor. Constructs an empty node.
xml_node(); xml_node();
// Constructs node from internal pointer // Constructs node from internal pointer
explicit xml_node(xml_node_struct* p); explicit xml_node(xml_node_struct* p);
// Safe bool conversion operator // Safe bool conversion operator
operator unspecified_bool_type() const; operator unspecified_bool_type() const;
// Borland C++ workaround // Borland C++ workaround
@ -398,24 +398,24 @@ namespace pugi
// Get attribute list // Get attribute list
xml_attribute first_attribute() const; xml_attribute first_attribute() const;
xml_attribute last_attribute() const; xml_attribute last_attribute() const;
// Get children list // Get children list
xml_node first_child() const; xml_node first_child() const;
xml_node last_child() const; xml_node last_child() const;
// Get next/previous sibling in the children list of the parent node // Get next/previous sibling in the children list of the parent node
xml_node next_sibling() const; xml_node next_sibling() const;
xml_node previous_sibling() const; xml_node previous_sibling() const;
// Get parent node // Get parent node
xml_node parent() const; xml_node parent() const;
// Get root of DOM tree this node belongs to // Get root of DOM tree this node belongs to
xml_node root() const; xml_node root() const;
// Get text object for the current node // Get text object for the current node
xml_text text() const; xml_text text() const;
// Get child, attribute or next/previous sibling with the specified name // Get child, attribute or next/previous sibling with the specified name
xml_node child(const char_t* name) const; xml_node child(const char_t* name) const;
@ -492,7 +492,7 @@ namespace pugi
if (pred(node)) if (pred(node))
return node; return node;
return xml_node(); return xml_node();
} }
// Find node from subtree using predicate. Returns first node from subtree (depth-first), for which predicate returned true. // Find node from subtree using predicate. Returns first node from subtree (depth-first), for which predicate returned true.
@ -565,16 +565,16 @@ namespace pugi
attribute_iterator attributes_begin() const; attribute_iterator attributes_begin() const;
attribute_iterator attributes_end() const; attribute_iterator attributes_end() const;
// Range-based for support // Range-based for support
xml_object_range<xml_node_iterator> children() const; xml_object_range<xml_node_iterator> children() const;
xml_object_range<xml_named_node_iterator> children(const char_t* name) const; xml_object_range<xml_named_node_iterator> children(const char_t* name) const;
xml_object_range<xml_attribute_iterator> attributes() const; xml_object_range<xml_attribute_iterator> attributes() const;
// Get node offset in parsed file/string (in char_t units) for debugging purposes // Get node offset in parsed file/string (in char_t units) for debugging purposes
ptrdiff_t offset_debug() const; ptrdiff_t offset_debug() const;
// Get hash value (unique for handles to the same object) // Get hash value (unique for handles to the same object)
size_t hash_value() const; size_t hash_value() const;
// Get internal pointer // Get internal pointer
xml_node_struct* internal_object() const; xml_node_struct* internal_object() const;
@ -586,29 +586,29 @@ namespace pugi
bool PUGIXML_FUNCTION operator||(const xml_node& lhs, bool rhs); bool PUGIXML_FUNCTION operator||(const xml_node& lhs, bool rhs);
#endif #endif
// A helper for working with text inside PCDATA nodes // A helper for working with text inside PCDATA nodes
class PUGIXML_CLASS xml_text class PUGIXML_CLASS xml_text
{ {
friend class xml_node; friend class xml_node;
xml_node_struct* _root; xml_node_struct* _root;
typedef void (*unspecified_bool_type)(xml_text***); typedef void (*unspecified_bool_type)(xml_text***);
explicit xml_text(xml_node_struct* root); explicit xml_text(xml_node_struct* root);
xml_node_struct* _data_new(); xml_node_struct* _data_new();
xml_node_struct* _data() const; xml_node_struct* _data() const;
public: public:
// Default constructor. Constructs an empty object. // Default constructor. Constructs an empty object.
xml_text(); xml_text();
// Safe bool conversion operator // Safe bool conversion operator
operator unspecified_bool_type() const; operator unspecified_bool_type() const;
// Borland C++ workaround // Borland C++ workaround
bool operator!() const; bool operator!() const;
// Check if text object is empty // Check if text object is empty
bool empty() const; bool empty() const;
@ -617,7 +617,7 @@ namespace pugi
const char_t* get() const; const char_t* get() const;
// Get text, or the default value if object is empty // Get text, or the default value if object is empty
const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const; const char_t* as_string(const char_t* def = PUGIXML_TEXT("")) const;
// Get text as a number, or the default value if conversion did not succeed or object is empty // Get text as a number, or the default value if conversion did not succeed or object is empty
int as_int(int def = 0) const; int as_int(int def = 0) const;
@ -625,13 +625,13 @@ namespace pugi
double as_double(double def = 0) const; double as_double(double def = 0) const;
float as_float(float def = 0) const; float as_float(float def = 0) const;
// Get text as bool (returns true if first character is in '1tTyY' set), or the default value if object is empty // Get text as bool (returns true if first character is in '1tTyY' set), or the default value if object is empty
bool as_bool(bool def = false) const; bool as_bool(bool def = false) const;
// Set text (returns false if object is empty or there is not enough memory) // Set text (returns false if object is empty or there is not enough memory)
bool set(const char_t* rhs); bool set(const char_t* rhs);
// Set text with type conversion (numbers are converted to strings, boolean is converted to "true"/"false") // Set text with type conversion (numbers are converted to strings, boolean is converted to "true"/"false")
bool set(int rhs); bool set(int rhs);
bool set(unsigned int rhs); bool set(unsigned int rhs);
bool set(double rhs); bool set(double rhs);
@ -644,9 +644,9 @@ namespace pugi
xml_text& operator=(double rhs); xml_text& operator=(double rhs);
xml_text& operator=(bool rhs); xml_text& operator=(bool rhs);
// Get the data node (node_pcdata or node_cdata) for this object // Get the data node (node_pcdata or node_cdata) for this object
xml_node data() const; xml_node data() const;
}; };
#ifdef __BORLANDC__ #ifdef __BORLANDC__
// Borland C++ workaround // Borland C++ workaround
@ -676,13 +676,13 @@ namespace pugi
typedef std::bidirectional_iterator_tag iterator_category; typedef std::bidirectional_iterator_tag iterator_category;
#endif #endif
// Default constructor // Default constructor
xml_node_iterator(); xml_node_iterator();
// Construct an iterator which points to the specified node // Construct an iterator which points to the specified node
xml_node_iterator(const xml_node& node); xml_node_iterator(const xml_node& node);
// Iterator operators // Iterator operators
bool operator==(const xml_node_iterator& rhs) const; bool operator==(const xml_node_iterator& rhs) const;
bool operator!=(const xml_node_iterator& rhs) const; bool operator!=(const xml_node_iterator& rhs) const;
@ -718,10 +718,10 @@ namespace pugi
typedef std::bidirectional_iterator_tag iterator_category; typedef std::bidirectional_iterator_tag iterator_category;
#endif #endif
// Default constructor // Default constructor
xml_attribute_iterator(); xml_attribute_iterator();
// Construct an iterator which points to the specified attribute // Construct an iterator which points to the specified attribute
xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent); xml_attribute_iterator(const xml_attribute& attr, const xml_node& parent);
// Iterator operators // Iterator operators
@ -738,40 +738,40 @@ namespace pugi
xml_attribute_iterator operator--(int); xml_attribute_iterator operator--(int);
}; };
// Named node range helper // Named node range helper
class xml_named_node_iterator class xml_named_node_iterator
{ {
public: public:
// Iterator traits // Iterator traits
typedef ptrdiff_t difference_type; typedef ptrdiff_t difference_type;
typedef xml_node value_type; typedef xml_node value_type;
typedef xml_node* pointer; typedef xml_node* pointer;
typedef xml_node& reference; typedef xml_node& reference;
#ifndef PUGIXML_NO_STL #ifndef PUGIXML_NO_STL
typedef std::forward_iterator_tag iterator_category; typedef std::forward_iterator_tag iterator_category;
#endif #endif
// Default constructor // Default constructor
xml_named_node_iterator(); xml_named_node_iterator();
// Construct an iterator which points to the specified node // Construct an iterator which points to the specified node
xml_named_node_iterator(const xml_node& node, const char_t* name); xml_named_node_iterator(const xml_node& node, const char_t* name);
// Iterator operators // Iterator operators
bool operator==(const xml_named_node_iterator& rhs) const; bool operator==(const xml_named_node_iterator& rhs) const;
bool operator!=(const xml_named_node_iterator& rhs) const; bool operator!=(const xml_named_node_iterator& rhs) const;
xml_node& operator*() const; xml_node& operator*() const;
xml_node* operator->() const; xml_node* operator->() const;
const xml_named_node_iterator& operator++(); const xml_named_node_iterator& operator++();
xml_named_node_iterator operator++(int); xml_named_node_iterator operator++(int);
private: private:
mutable xml_node _node; mutable xml_node _node;
const char_t* _name; const char_t* _name;
}; };
// Abstract tree walker class (see xml_node::traverse) // Abstract tree walker class (see xml_node::traverse)
class PUGIXML_CLASS xml_tree_walker class PUGIXML_CLASS xml_tree_walker
@ -802,23 +802,23 @@ namespace pugi
// Parsing status, returned as part of xml_parse_result object // Parsing status, returned as part of xml_parse_result object
enum xml_parse_status enum xml_parse_status
{ {
status_ok = 0, // No error status_ok = 0, // No error
status_file_not_found, // File was not found during load_file() status_file_not_found, // File was not found during load_file()
status_io_error, // Error reading from file/stream status_io_error, // Error reading from file/stream
status_out_of_memory, // Could not allocate memory status_out_of_memory, // Could not allocate memory
status_internal_error, // Internal error occurred status_internal_error, // Internal error occurred
status_unrecognized_tag, // Parser could not determine tag type status_unrecognized_tag, // Parser could not determine tag type
status_bad_pi, // Parsing error occurred while parsing document declaration/processing instruction status_bad_pi, // Parsing error occurred while parsing document declaration/processing instruction
status_bad_comment, // Parsing error occurred while parsing comment status_bad_comment, // Parsing error occurred while parsing comment
status_bad_cdata, // Parsing error occurred while parsing CDATA section status_bad_cdata, // Parsing error occurred while parsing CDATA section
status_bad_doctype, // Parsing error occurred while parsing document type declaration status_bad_doctype, // Parsing error occurred while parsing document type declaration
status_bad_pcdata, // Parsing error occurred while parsing PCDATA section status_bad_pcdata, // Parsing error occurred while parsing PCDATA section
status_bad_start_element, // Parsing error occurred while parsing start element tag status_bad_start_element, // Parsing error occurred while parsing start element tag
status_bad_attribute, // Parsing error occurred while parsing element attribute status_bad_attribute, // Parsing error occurred while parsing element attribute
status_bad_end_element, // Parsing error occurred while parsing end element tag status_bad_end_element, // Parsing error occurred while parsing end element tag
status_end_element_mismatch // There was a mismatch of start-end tags (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag) status_end_element_mismatch // There was a mismatch of start-end tags (closing tag had incorrect name, some tag was not closed or there was an excessive closing tag)
}; };
@ -834,7 +834,7 @@ namespace pugi
// Source document encoding // Source document encoding
xml_encoding encoding; xml_encoding encoding;
// Default constructor, initializes object to failed state // Default constructor, initializes object to failed state
xml_parse_result(); xml_parse_result();
// Cast to bool operator // Cast to bool operator
@ -868,10 +868,10 @@ namespace pugi
// Destructor, invalidates all node/attribute handles to this document // Destructor, invalidates all node/attribute handles to this document
~xml_document(); ~xml_document();
// Removes all nodes, leaving the empty document // Removes all nodes, leaving the empty document
void reset(); void reset();
// Removes all nodes, then copies the entire contents of the specified document // Removes all nodes, then copies the entire contents of the specified document
void reset(const xml_document& proto); void reset(const xml_document& proto);
#ifndef PUGIXML_NO_STL #ifndef PUGIXML_NO_STL
@ -891,11 +891,11 @@ namespace pugi
xml_parse_result load_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); xml_parse_result load_buffer(const void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
// Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data).
// You should ensure that buffer data will persist throughout the document's lifetime, and free the buffer memory manually once document is destroyed. // You should ensure that buffer data will persist throughout the document's lifetime, and free the buffer memory manually once document is destroyed.
xml_parse_result load_buffer_inplace(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); xml_parse_result load_buffer_inplace(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
// Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data). // Load document from buffer, using the buffer for in-place parsing (the buffer is modified and used for storage of document data).
// You should allocate the buffer with pugixml allocation function; document will free the buffer when it is no longer needed (you can't use it anymore). // You should allocate the buffer with pugixml allocation function; document will free the buffer when it is no longer needed (you can't use it anymore).
xml_parse_result load_buffer_inplace_own(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto); xml_parse_result load_buffer_inplace_own(void* contents, size_t size, unsigned int options = parse_default, xml_encoding encoding = encoding_auto);
// Save XML document to writer (semantics is slightly different from xml_node::print, see documentation for details). // Save XML document to writer (semantics is slightly different from xml_node::print, see documentation for details).
@ -911,22 +911,22 @@ namespace pugi
bool save_file(const char* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const; bool save_file(const char* path, const char_t* indent = PUGIXML_TEXT("\t"), unsigned int flags = format_default, xml_encoding encoding = encoding_auto) const;
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; 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;
// Get document element // Get document element
xml_node document_element() const; xml_node document_element() const;
}; };
#ifndef PUGIXML_NO_XPATH #ifndef PUGIXML_NO_XPATH
// XPath query return type // XPath query return type
enum xpath_value_type enum xpath_value_type
{ {
xpath_type_none, // Unknown type (query failed to compile) xpath_type_none, // Unknown type (query failed to compile)
xpath_type_node_set, // Node set (xpath_node_set) xpath_type_node_set, // Node set (xpath_node_set)
xpath_type_number, // Number xpath_type_number, // Number
xpath_type_string, // String xpath_type_string, // String
xpath_type_boolean // Boolean xpath_type_boolean // Boolean
}; };
// XPath parsing result // XPath parsing result
struct PUGIXML_CLASS xpath_parse_result struct PUGIXML_CLASS xpath_parse_result
{ {
// Error message (0 if no error) // Error message (0 if no error)
@ -935,7 +935,7 @@ namespace pugi
// Last parsed offset (in char_t units from string start) // Last parsed offset (in char_t units from string start)
ptrdiff_t offset; ptrdiff_t offset;
// Default constructor, initializes object to failed state // Default constructor, initializes object to failed state
xpath_parse_result(); xpath_parse_result();
// Cast to bool operator // Cast to bool operator
@ -961,19 +961,19 @@ namespace pugi
xpath_variable& operator=(const xpath_variable&); xpath_variable& operator=(const xpath_variable&);
public: public:
// Get variable name // Get variable name
const char_t* name() const; const char_t* name() const;
// Get variable type // Get variable type
xpath_value_type type() const; xpath_value_type type() const;
// Get variable value; no type conversion is performed, default value (false, NaN, empty string, empty node set) is returned on type mismatch error // Get variable value; no type conversion is performed, default value (false, NaN, empty string, empty node set) is returned on type mismatch error
bool get_boolean() const; bool get_boolean() const;
double get_number() const; double get_number() const;
const char_t* get_string() const; const char_t* get_string() const;
const xpath_node_set& get_node_set() const; const xpath_node_set& get_node_set() const;
// Set variable value; no type conversion is performed, false is returned on type mismatch error // Set variable value; no type conversion is performed, false is returned on type mismatch error
bool set(bool value); bool set(bool value);
bool set(double value); bool set(double value);
bool set(const char_t* value); bool set(const char_t* value);
@ -993,20 +993,20 @@ namespace pugi
xpath_variable* find(const char_t* name) const; xpath_variable* find(const char_t* name) const;
public: public:
// Default constructor/destructor // Default constructor/destructor
xpath_variable_set(); xpath_variable_set();
~xpath_variable_set(); ~xpath_variable_set();
// Add a new variable or get the existing one, if the types match // Add a new variable or get the existing one, if the types match
xpath_variable* add(const char_t* name, xpath_value_type type); xpath_variable* add(const char_t* name, xpath_value_type type);
// Set value of an existing variable; no type conversion is performed, false is returned if there is no such variable or if types mismatch // Set value of an existing variable; no type conversion is performed, false is returned if there is no such variable or if types mismatch
bool set(const char_t* name, bool value); bool set(const char_t* name, bool value);
bool set(const char_t* name, double value); bool set(const char_t* name, double value);
bool set(const char_t* name, const char_t* value); bool set(const char_t* name, const char_t* value);
bool set(const char_t* name, const xpath_node_set& value); bool set(const char_t* name, const xpath_node_set& value);
// Get existing variable by name // Get existing variable by name
xpath_variable* get(const char_t* name); xpath_variable* get(const char_t* name);
const xpath_variable* get(const char_t* name) const; const xpath_variable* get(const char_t* name) const;
}; };
@ -1018,15 +1018,15 @@ namespace pugi
void* _impl; void* _impl;
xpath_parse_result _result; xpath_parse_result _result;
typedef void (*unspecified_bool_type)(xpath_query***); typedef void (*unspecified_bool_type)(xpath_query***);
// Non-copyable semantics // Non-copyable semantics
xpath_query(const xpath_query&); xpath_query(const xpath_query&);
xpath_query& operator=(const xpath_query&); xpath_query& operator=(const xpath_query&);
public: public:
// Construct a compiled object from XPath expression. // Construct a compiled object from XPath expression.
// If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors. // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on compilation errors.
explicit xpath_query(const char_t* query, xpath_variable_set* variables = 0); explicit xpath_query(const char_t* query, xpath_variable_set* variables = 0);
// Destructor // Destructor
@ -1036,28 +1036,28 @@ namespace pugi
xpath_value_type return_type() const; xpath_value_type return_type() const;
// Evaluate expression as boolean value in the specified context; performs type conversion if necessary. // Evaluate expression as boolean value in the specified context; performs type conversion if necessary.
// If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors.
bool evaluate_boolean(const xpath_node& n) const; bool evaluate_boolean(const xpath_node& n) const;
// Evaluate expression as double value in the specified context; performs type conversion if necessary. // Evaluate expression as double value in the specified context; performs type conversion if necessary.
// If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors.
double evaluate_number(const xpath_node& n) const; double evaluate_number(const xpath_node& n) const;
#ifndef PUGIXML_NO_STL #ifndef PUGIXML_NO_STL
// Evaluate expression as string value in the specified context; performs type conversion if necessary. // Evaluate expression as string value in the specified context; performs type conversion if necessary.
// If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors.
string_t evaluate_string(const xpath_node& n) const; string_t evaluate_string(const xpath_node& n) const;
#endif #endif
// Evaluate expression as string value in the specified context; performs type conversion if necessary. // Evaluate expression as string value in the specified context; performs type conversion if necessary.
// At most capacity characters are written to the destination buffer, full result size is returned (includes terminating zero). // At most capacity characters are written to the destination buffer, full result size is returned (includes terminating zero).
// If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors. // If PUGIXML_NO_EXCEPTIONS is not defined, throws std::bad_alloc on out of memory errors.
// If PUGIXML_NO_EXCEPTIONS is defined, returns empty set instead. // If PUGIXML_NO_EXCEPTIONS is defined, returns empty set instead.
size_t evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const; size_t evaluate_string(char_t* buffer, size_t capacity, const xpath_node& n) const;
// Evaluate expression as node set in the specified context. // Evaluate expression as node set in the specified context.
// If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors. // If PUGIXML_NO_EXCEPTIONS is not defined, throws xpath_exception on type mismatch and std::bad_alloc on out of memory errors.
// If PUGIXML_NO_EXCEPTIONS is defined, returns empty node set instead. // If PUGIXML_NO_EXCEPTIONS is defined, returns empty node set instead.
xpath_node_set evaluate_node_set(const xpath_node& n) const; xpath_node_set evaluate_node_set(const xpath_node& n) const;
// Get parsing result (used to get compilation errors in PUGIXML_NO_EXCEPTIONS mode) // Get parsing result (used to get compilation errors in PUGIXML_NO_EXCEPTIONS mode)
@ -1066,7 +1066,7 @@ namespace pugi
// Safe bool conversion operator // Safe bool conversion operator
operator unspecified_bool_type() const; operator unspecified_bool_type() const;
// Borland C++ workaround // Borland C++ workaround
bool operator!() const; bool operator!() const;
}; };
@ -1084,7 +1084,7 @@ namespace pugi
// Get error message // Get error message
virtual const char* what() const throw(); virtual const char* what() const throw();
// Get parse result // Get parse result
const xpath_parse_result& result() const; const xpath_parse_result& result() const;
}; };
#endif #endif
@ -1096,7 +1096,7 @@ namespace pugi
xml_node _node; xml_node _node;
xml_attribute _attribute; xml_attribute _attribute;
typedef void (*unspecified_bool_type)(xpath_node***); typedef void (*unspecified_bool_type)(xpath_node***);
public: public:
// Default constructor; constructs empty XPath node // Default constructor; constructs empty XPath node
@ -1113,11 +1113,11 @@ namespace pugi
// Get parent of contained node/attribute // Get parent of contained node/attribute
xml_node parent() const; xml_node parent() const;
// Safe bool conversion operator // Safe bool conversion operator
operator unspecified_bool_type() const; operator unspecified_bool_type() const;
// Borland C++ workaround // Borland C++ workaround
bool operator!() const; bool operator!() const;
// Comparison operators // Comparison operators
bool operator==(const xpath_node& n) const; bool operator==(const xpath_node& n) const;
@ -1164,7 +1164,7 @@ namespace pugi
// Get collection size // Get collection size
size_t size() const; size_t size() const;
// Indexing operator // Indexing operator
const xpath_node& operator[](size_t index) const; const xpath_node& operator[](size_t index) const;
// Collection iterators // Collection iterators
@ -1206,14 +1206,14 @@ namespace pugi
typedef void* (*allocation_function)(size_t size); typedef void* (*allocation_function)(size_t size);
// Memory deallocation function interface // Memory deallocation function interface
typedef void (*deallocation_function)(void* ptr); typedef void (*deallocation_function)(void* ptr);
// Override default memory management functions. All subsequent allocations/deallocations will be performed via supplied functions. // Override default memory management functions. All subsequent allocations/deallocations will be performed via supplied functions.
void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate); void PUGIXML_FUNCTION set_memory_management_functions(allocation_function allocate, deallocation_function deallocate);
// Get current memory management functions // Get current memory management functions
allocation_function PUGIXML_FUNCTION get_memory_allocation_function(); allocation_function PUGIXML_FUNCTION get_memory_allocation_function();
deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function(); deallocation_function PUGIXML_FUNCTION get_memory_deallocation_function();
} }
#if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC)) #if !defined(PUGIXML_NO_STL) && (defined(_MSC_VER) || defined(__ICC))