Skip to content

Commit

Permalink
enable usage of constexpr and inline constexpr for constants when C++…
Browse files Browse the repository at this point in the history
… version is >= 11
  • Loading branch information
Arthapz committed Oct 31, 2024
1 parent 781e2db commit 2587d67
Showing 1 changed file with 52 additions and 31 deletions.
83 changes: 52 additions & 31 deletions src/pugixml.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,27 @@
# endif
#endif

// If C++ is 2011 or higher, add 'constexpr' qualifiers
#ifndef PUGIXML_CONSTEXPR
# if __cplusplus >= 201103
# define PUGIXML_CONSTEXPR constexpr
# elif defined(_MSC_VER) && _MSC_VER >= 1910
# define PUGIXML_CONSTEXPR constexpr
# else
# define PUGIXML_CONSTEXPR const
# endif
#endif

// If C++ is 2017 or higher, add 'inline' qualifiers for constants
// required for C++20 module
#ifndef PUGIXML_CONSTANT
# if __cplusplus >= 201703
# define PUGIXML_CONSTANT inline PUGIXML_CONSTEXPR
# else
# define PUGIXML_CONSTANT PUGIXML_CONSTEXPR
# endif
#endif

// Character interface macros
#ifdef PUGIXML_WCHAR_MODE
# define PUGIXML_TEXT(t) L ## t
Expand Down Expand Up @@ -182,69 +203,69 @@ namespace pugi

// 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.
const unsigned int parse_minimal = 0x0000;
PUGIXML_CONSTANT 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.
const unsigned int parse_pi = 0x0001;
PUGIXML_CONSTANT unsigned int parse_pi = 0x0001;

// This flag determines if comments (node_comment) are added to the DOM tree. This flag is off by default.
const unsigned int parse_comments = 0x0002;
PUGIXML_CONSTANT unsigned int parse_comments = 0x0002;

// This flag determines if CDATA sections (node_cdata) are added to the DOM tree. This flag is on by default.
const unsigned int parse_cdata = 0x0004;
PUGIXML_CONSTANT 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 is off by default; turning it on usually results in slower parsing and more memory consumption.
const unsigned int parse_ws_pcdata = 0x0008;
PUGIXML_CONSTANT unsigned int parse_ws_pcdata = 0x0008;

// This flag determines if character and entity references are expanded during parsing. This flag is on by default.
const unsigned int parse_escapes = 0x0010;
PUGIXML_CONSTANT unsigned int parse_escapes = 0x0010;

// 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;
PUGIXML_CONSTANT 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.
const unsigned int parse_wconv_attribute = 0x0040;
PUGIXML_CONSTANT 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.
const unsigned int parse_wnorm_attribute = 0x0080;
PUGIXML_CONSTANT 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.
const unsigned int parse_declaration = 0x0100;
PUGIXML_CONSTANT 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.
const unsigned int parse_doctype = 0x0200;
PUGIXML_CONSTANT 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
// 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.
const unsigned int parse_ws_pcdata_single = 0x0400;
PUGIXML_CONSTANT unsigned int parse_ws_pcdata_single = 0x0400;

// This flag determines if leading and trailing whitespace is to be removed from plain character data. This flag is off by default.
const unsigned int parse_trim_pcdata = 0x0800;
PUGIXML_CONSTANT unsigned int parse_trim_pcdata = 0x0800;

// This flag determines if plain character data that does not have a parent node is added to the DOM tree, and if an empty document
// is a valid document. This flag is off by default.
const unsigned int parse_fragment = 0x1000;
PUGIXML_CONSTANT unsigned int parse_fragment = 0x1000;

// This flag determines if plain character data is be stored in the parent element's value. This significantly changes the structure of
// the document; this flag is only recommended for parsing documents with many PCDATA nodes in memory-constrained environments.
// This flag is off by default.
const unsigned int parse_embed_pcdata = 0x2000;
PUGIXML_CONSTANT unsigned int parse_embed_pcdata = 0x2000;

// This flag determines whether determines whether the the two pcdata should be merged or not, if no intermediatory data are parsed in the document.
// This flag is off by default.
const unsigned int parse_merge_pcdata = 0x4000;
PUGIXML_CONSTANT unsigned int parse_merge_pcdata = 0x4000;

// The default parsing mode.
// 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.
const unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol;
PUGIXML_CONSTANT unsigned int parse_default = parse_cdata | parse_escapes | parse_wconv_attribute | parse_eol;

// The full parsing mode.
// 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.
const unsigned int parse_full = parse_default | parse_pi | parse_comments | parse_declaration | parse_doctype;
PUGIXML_CONSTANT 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
enum xml_encoding
Expand All @@ -264,41 +285,41 @@ namespace pugi
// Formatting flags

// Indent the nodes that are written to output stream with as many indentation strings as deep the node is in DOM tree. This flag is on by default.
const unsigned int format_indent = 0x01;
PUGIXML_CONSTANT unsigned int format_indent = 0x01;

// Write encoding-specific BOM to the output stream. This flag is off by default.
const unsigned int format_write_bom = 0x02;
PUGIXML_CONSTANT unsigned int format_write_bom = 0x02;

// Use raw output mode (no indentation and no line breaks are written). This flag is off by default.
const unsigned int format_raw = 0x04;
PUGIXML_CONSTANT unsigned int format_raw = 0x04;

// 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;
PUGIXML_CONSTANT unsigned int format_no_declaration = 0x08;

// Don't escape attribute values and PCDATA contents. This flag is off by default.
const unsigned int format_no_escapes = 0x10;
PUGIXML_CONSTANT 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.
const unsigned int format_save_file_text = 0x20;
PUGIXML_CONSTANT unsigned int format_save_file_text = 0x20;

// Write every attribute on a new line with appropriate indentation. This flag is off by default.
const unsigned int format_indent_attributes = 0x40;
PUGIXML_CONSTANT unsigned int format_indent_attributes = 0x40;

// Don't output empty element tags, instead writing an explicit start and end tag even if there are no children. This flag is off by default.
const unsigned int format_no_empty_element_tags = 0x80;
PUGIXML_CONSTANT unsigned int format_no_empty_element_tags = 0x80;

// Skip characters belonging to range [0; 32) instead of "&#xNN;" encoding. This flag is off by default.
const unsigned int format_skip_control_chars = 0x100;
PUGIXML_CONSTANT unsigned int format_skip_control_chars = 0x100;

// Use single quotes ' instead of double quotes " for enclosing attribute values. This flag is off by default.
const unsigned int format_attribute_single_quote = 0x200;
PUGIXML_CONSTANT unsigned int format_attribute_single_quote = 0x200;

// 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.
const unsigned int format_default = format_indent;
PUGIXML_CONSTANT unsigned int format_default = format_indent;

const int default_double_precision = 17;
const int default_float_precision = 9;
PUGIXML_CONSTANT int default_double_precision = 17;
PUGIXML_CONSTANT int default_float_precision = 9;

// Forward declarations
struct xml_attribute_struct;
Expand Down

0 comments on commit 2587d67

Please sign in to comment.