mirror of
https://gitlab.com/mbunkus/mkvtoolnix.git
synced 2024-12-23 19:31:44 +00:00
pugixml: update to v1.9 (git revision e584ea3)
Fixes a warning with g++ 8.0.0 and newer regarding ignored function attributes.
This commit is contained in:
parent
e8b6fecd39
commit
c50c7125ef
5
NEWS.md
5
NEWS.md
@ -27,6 +27,11 @@
|
||||
* MKVToolNix GUI: header editor: fixed a crash when saving the file fails
|
||||
(e.g. because it isn't writable). Fixes #2319.
|
||||
|
||||
## Other changes
|
||||
|
||||
* pugixml library: the bundled version has been updated from v1.8 to v1.9 (git
|
||||
revision e584ea3).
|
||||
|
||||
|
||||
# Version 23.0.0 "The Bride Said No" 2018-05-02
|
||||
|
||||
|
@ -351,7 +351,7 @@ JSON for Modern C++
|
||||
|
||||
An XML processing library
|
||||
|
||||
* Copyright: 2006–2017 by Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
|
||||
* Copyright: 2006–2018 by Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
|
||||
* License: MIT (see `doc/licenses/pugixml-MIT.txt`)
|
||||
* URL: http://pugixml.org/
|
||||
* Corresponding files: `lib/pugixml/*`
|
||||
|
@ -1,4 +1,4 @@
|
||||
Copyright (c) 2006-2017 Arseny Kapoulkine
|
||||
Copyright (c) 2006-2018 Arseny Kapoulkine
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
1
lib/pugixml/git-info.txt
Normal file
1
lib/pugixml/git-info.txt
Normal file
@ -0,0 +1 @@
|
||||
e584ea337ede5b33d3e3f2165352a233b67b7fab https://github.com/zeux/pugixml.git
|
@ -1,6 +1,6 @@
|
||||
pugixml 1.8 - an XML processing library
|
||||
pugixml 1.9 - an XML processing library
|
||||
|
||||
Copyright (C) 2006-2017, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
Report bugs and download new versions at http://pugixml.org/
|
||||
|
||||
This is the distribution of pugixml, which is a C++ XML processing library,
|
||||
@ -28,7 +28,7 @@ The distribution contains the following folders:
|
||||
|
||||
This library is distributed under the MIT License:
|
||||
|
||||
Copyright (c) 2006-2017 Arseny Kapoulkine
|
||||
Copyright (c) 2006-2018 Arseny Kapoulkine
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* pugixml parser - version 1.8
|
||||
* pugixml parser - version 1.9
|
||||
* --------------------------------------------------------
|
||||
* Copyright (C) 2006-2017, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
* Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
* Report bugs and download new versions at http://pugixml.org/
|
||||
*
|
||||
* This library is distributed under the MIT License. See notice at the end
|
||||
@ -49,7 +49,7 @@
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Copyright (c) 2006-2017 Arseny Kapoulkine
|
||||
* Copyright (c) 2006-2018 Arseny Kapoulkine
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* pugixml parser - version 1.8
|
||||
* pugixml parser - version 1.9
|
||||
* --------------------------------------------------------
|
||||
* Copyright (C) 2006-2017, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
* Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
* Report bugs and download new versions at http://pugixml.org/
|
||||
*
|
||||
* This library is distributed under the MIT License. See notice at the end
|
||||
@ -48,6 +48,11 @@
|
||||
# pragma warning(disable: 4996) // this function or variable may be unsafe
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && defined(__c2__)
|
||||
# pragma clang diagnostic push
|
||||
# pragma clang diagnostic ignored "-Wdeprecated" // this function or variable may be unsafe
|
||||
#endif
|
||||
|
||||
#ifdef __INTEL_COMPILER
|
||||
# pragma warning(disable: 177) // function was declared but never referenced
|
||||
# pragma warning(disable: 279) // controlling expression is constant
|
||||
@ -71,6 +76,10 @@
|
||||
# pragma diag_suppress=237 // controlling expression is constant
|
||||
#endif
|
||||
|
||||
#ifdef __TI_COMPILER_VERSION__
|
||||
# pragma diag_suppress 179 // function was declared but never referenced
|
||||
#endif
|
||||
|
||||
// Inlining controls
|
||||
#if defined(_MSC_VER) && _MSC_VER >= 1300
|
||||
# define PUGI__NO_INLINE __declspec(noinline)
|
||||
@ -81,7 +90,7 @@
|
||||
#endif
|
||||
|
||||
// Branch weight controls
|
||||
#if defined(__GNUC__)
|
||||
#if defined(__GNUC__) && !defined(__c2__)
|
||||
# define PUGI__UNLIKELY(cond) __builtin_expect(cond, 0)
|
||||
#else
|
||||
# define PUGI__UNLIKELY(cond) (cond)
|
||||
@ -97,8 +106,8 @@
|
||||
# define PUGI__DMC_VOLATILE
|
||||
#endif
|
||||
|
||||
// Integer sanitizer workaround
|
||||
#ifdef __has_attribute
|
||||
// Integer sanitizer workaround; we only apply this for clang since gcc8 has no_sanitize but not unsigned-integer-overflow and produces "attribute directive ignored" warnings
|
||||
#if defined(__clang__) && defined(__has_attribute)
|
||||
# if __has_attribute(no_sanitize)
|
||||
# define PUGI__UNSIGNED_OVERFLOW __attribute__((no_sanitize("unsigned-integer-overflow")))
|
||||
# else
|
||||
@ -115,11 +124,11 @@ using std::memmove;
|
||||
using std::memset;
|
||||
#endif
|
||||
|
||||
// Some MinGW versions have headers that erroneously omit LLONG_MIN/LLONG_MAX/ULLONG_MAX definitions in strict ANSI mode
|
||||
#if defined(PUGIXML_HAS_LONG_LONG) && defined(__MINGW32__) && defined(__STRICT_ANSI__) && !defined(LLONG_MAX) && !defined(LLONG_MIN) && !defined(ULLONG_MAX)
|
||||
# define LLONG_MAX 9223372036854775807LL
|
||||
# define LLONG_MIN (-LLONG_MAX-1)
|
||||
# define ULLONG_MAX (2ULL*LLONG_MAX+1)
|
||||
// Some MinGW/GCC versions have headers that erroneously omit LLONG_MIN/LLONG_MAX/ULLONG_MAX definitions from limits.h in some configurations
|
||||
#if defined(PUGIXML_HAS_LONG_LONG) && defined(__GNUC__) && !defined(LLONG_MAX) && !defined(LLONG_MIN) && !defined(ULLONG_MAX)
|
||||
# define LLONG_MIN (-LLONG_MAX - 1LL)
|
||||
# define LLONG_MAX __LONG_LONG_MAX__
|
||||
# define ULLONG_MAX (LLONG_MAX * 2ULL + 1ULL)
|
||||
#endif
|
||||
|
||||
// In some environments MSVC is a compiler but the CRT lacks certain MSVC-specific features
|
||||
@ -322,10 +331,10 @@ PUGI__NS_BEGIN
|
||||
item->value = value;
|
||||
}
|
||||
|
||||
bool reserve()
|
||||
bool reserve(size_t extra = 16)
|
||||
{
|
||||
if (_count + 16 >= _capacity - _capacity / 4)
|
||||
return rehash();
|
||||
if (_count + extra >= _capacity - _capacity / 4)
|
||||
return rehash(_count + extra);
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -342,7 +351,7 @@ PUGI__NS_BEGIN
|
||||
|
||||
size_t _count;
|
||||
|
||||
bool rehash();
|
||||
bool rehash(size_t count);
|
||||
|
||||
item_t* get_item(const void* key)
|
||||
{
|
||||
@ -382,16 +391,20 @@ PUGI__NS_BEGIN
|
||||
}
|
||||
};
|
||||
|
||||
PUGI__FN_NO_INLINE bool compact_hash_table::rehash()
|
||||
PUGI__FN_NO_INLINE bool compact_hash_table::rehash(size_t count)
|
||||
{
|
||||
size_t capacity = 32;
|
||||
while (count >= capacity - capacity / 4)
|
||||
capacity *= 2;
|
||||
|
||||
compact_hash_table rt;
|
||||
rt._capacity = (_capacity == 0) ? 32 : _capacity * 2;
|
||||
rt._items = static_cast<item_t*>(xml_memory::allocate(sizeof(item_t) * rt._capacity));
|
||||
rt._capacity = capacity;
|
||||
rt._items = static_cast<item_t*>(xml_memory::allocate(sizeof(item_t) * capacity));
|
||||
|
||||
if (!rt._items)
|
||||
return false;
|
||||
|
||||
memset(rt._items, 0, sizeof(item_t) * rt._capacity);
|
||||
memset(rt._items, 0, sizeof(item_t) * capacity);
|
||||
|
||||
for (size_t i = 0; i < _capacity; ++i)
|
||||
if (_items[i].key)
|
||||
@ -400,7 +413,7 @@ PUGI__NS_BEGIN
|
||||
if (_items)
|
||||
xml_memory::deallocate(_items);
|
||||
|
||||
_capacity = rt._capacity;
|
||||
_capacity = capacity;
|
||||
_items = rt._items;
|
||||
|
||||
assert(_count == rt._count);
|
||||
@ -839,7 +852,7 @@ PUGI__NS_BEGIN
|
||||
{
|
||||
uintptr_t base = reinterpret_cast<uintptr_t>(this) & ~(compact_alignment - 1);
|
||||
|
||||
return reinterpret_cast<T*>(base + ((_data - 1 + start) << compact_alignment_log2));
|
||||
return reinterpret_cast<T*>(base + (_data - 1 + start) * compact_alignment);
|
||||
}
|
||||
else
|
||||
return compact_get_value<header_offset, T>(this);
|
||||
@ -917,7 +930,7 @@ PUGI__NS_BEGIN
|
||||
{
|
||||
uintptr_t base = reinterpret_cast<uintptr_t>(this) & ~(compact_alignment - 1);
|
||||
|
||||
return reinterpret_cast<T*>(base + ((_data - 1 - 65533) << compact_alignment_log2));
|
||||
return reinterpret_cast<T*>(base + (_data - 1 - 65533) * compact_alignment);
|
||||
}
|
||||
else if (_data == 65534)
|
||||
return static_cast<T*>(compact_get_page(this, header_offset)->compact_shared_parent);
|
||||
@ -2696,7 +2709,7 @@ PUGI__NS_BEGIN
|
||||
{
|
||||
PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_trim_pcdata == 0x0800);
|
||||
|
||||
switch (((optmask >> 4) & 3) | ((optmask >> 9) & 4)) // get bitmask for flags (eol escapes trim)
|
||||
switch (((optmask >> 4) & 3) | ((optmask >> 9) & 4)) // get bitmask for flags (trim eol escapes); this simultaneously checks 3 options from assertion above
|
||||
{
|
||||
case 0: return strconv_pcdata_impl<opt_false, opt_false, opt_false>::parse;
|
||||
case 1: return strconv_pcdata_impl<opt_false, opt_false, opt_true>::parse;
|
||||
@ -2865,7 +2878,7 @@ PUGI__NS_BEGIN
|
||||
{
|
||||
PUGI__STATIC_ASSERT(parse_escapes == 0x10 && parse_eol == 0x20 && parse_wconv_attribute == 0x40 && parse_wnorm_attribute == 0x80);
|
||||
|
||||
switch ((optmask >> 4) & 15) // get bitmask for flags (wconv wnorm eol escapes)
|
||||
switch ((optmask >> 4) & 15) // get bitmask for flags (wnorm wconv eol escapes); this simultaneously checks 4 options from assertion above
|
||||
{
|
||||
case 0: return strconv_attribute_impl<opt_false>::parse_simple;
|
||||
case 1: return strconv_attribute_impl<opt_true>::parse_simple;
|
||||
@ -4410,6 +4423,7 @@ PUGI__NS_BEGIN
|
||||
|
||||
while (sit && sit != sn)
|
||||
{
|
||||
// when a tree is copied into one of the descendants, we need to skip that subtree to avoid an infinite loop
|
||||
if (sit != dn)
|
||||
{
|
||||
xml_node_struct* copy = append_new_node(dit, alloc, PUGI__NODETYPE(sit));
|
||||
@ -6063,11 +6077,17 @@ namespace pugi
|
||||
|
||||
// get extra buffer element (we'll store the document fragment buffer there so that we can deallocate it later)
|
||||
impl::xml_memory_page* page = 0;
|
||||
impl::xml_extra_buffer* extra = static_cast<impl::xml_extra_buffer*>(doc->allocate_memory(sizeof(impl::xml_extra_buffer), page));
|
||||
impl::xml_extra_buffer* extra = static_cast<impl::xml_extra_buffer*>(doc->allocate_memory(sizeof(impl::xml_extra_buffer) + sizeof(void*), page));
|
||||
(void)page;
|
||||
|
||||
if (!extra) return impl::make_parse_result(status_out_of_memory);
|
||||
|
||||
#ifdef PUGIXML_COMPACT
|
||||
// align the memory block to a pointer boundary; this is required for compact mode where memory allocations are only 4b aligned
|
||||
// note that this requires up to sizeof(void*)-1 additional memory, which the allocation above takes into account
|
||||
extra = reinterpret_cast<impl::xml_extra_buffer*>((reinterpret_cast<uintptr_t>(extra) + (sizeof(void*) - 1)) & ~(sizeof(void*) - 1));
|
||||
#endif
|
||||
|
||||
// add extra buffer to the list
|
||||
extra->buffer = 0;
|
||||
extra->next = doc->extra_buffers;
|
||||
@ -6193,10 +6213,10 @@ namespace pugi
|
||||
{
|
||||
walker._depth = -1;
|
||||
|
||||
xml_node arg_begin = *this;
|
||||
xml_node arg_begin(_root);
|
||||
if (!walker.begin(arg_begin)) return false;
|
||||
|
||||
xml_node cur = first_child();
|
||||
xml_node_struct* cur = _root ? _root->first_child + 0 : 0;
|
||||
|
||||
if (cur)
|
||||
{
|
||||
@ -6204,36 +6224,35 @@ namespace pugi
|
||||
|
||||
do
|
||||
{
|
||||
xml_node arg_for_each = cur;
|
||||
xml_node arg_for_each(cur);
|
||||
if (!walker.for_each(arg_for_each))
|
||||
return false;
|
||||
|
||||
if (cur.first_child())
|
||||
if (cur->first_child)
|
||||
{
|
||||
++walker._depth;
|
||||
cur = cur.first_child();
|
||||
cur = cur->first_child;
|
||||
}
|
||||
else if (cur.next_sibling())
|
||||
cur = cur.next_sibling();
|
||||
else if (cur->next_sibling)
|
||||
cur = cur->next_sibling;
|
||||
else
|
||||
{
|
||||
// Borland C++ workaround
|
||||
while (!cur.next_sibling() && cur != *this && !cur.parent().empty())
|
||||
while (!cur->next_sibling && cur != _root && cur->parent)
|
||||
{
|
||||
--walker._depth;
|
||||
cur = cur.parent();
|
||||
cur = cur->parent;
|
||||
}
|
||||
|
||||
if (cur != *this)
|
||||
cur = cur.next_sibling();
|
||||
if (cur != _root)
|
||||
cur = cur->next_sibling;
|
||||
}
|
||||
}
|
||||
while (cur && cur != *this);
|
||||
while (cur && cur != _root);
|
||||
}
|
||||
|
||||
assert(walker._depth == -1);
|
||||
|
||||
xml_node arg_end = *this;
|
||||
xml_node arg_end(_root);
|
||||
return walker.end(arg_end);
|
||||
}
|
||||
|
||||
@ -6825,6 +6844,25 @@ namespace pugi
|
||||
_destroy();
|
||||
}
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
PUGI__FN xml_document::xml_document(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT: _buffer(0)
|
||||
{
|
||||
_create();
|
||||
_move(rhs);
|
||||
}
|
||||
|
||||
PUGI__FN xml_document& xml_document::operator=(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT
|
||||
{
|
||||
if (this == &rhs) return *this;
|
||||
|
||||
_destroy();
|
||||
_create();
|
||||
_move(rhs);
|
||||
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
|
||||
PUGI__FN void xml_document::reset()
|
||||
{
|
||||
_destroy();
|
||||
@ -6844,7 +6882,8 @@ namespace pugi
|
||||
assert(!_root);
|
||||
|
||||
#ifdef PUGIXML_COMPACT
|
||||
const size_t page_offset = sizeof(uint32_t);
|
||||
// space for page marker for the first page (uint32_t), rounded up to pointer size; assumes pointers are at least 32-bit
|
||||
const size_t page_offset = sizeof(void*);
|
||||
#else
|
||||
const size_t page_offset = 0;
|
||||
#endif
|
||||
@ -6920,6 +6959,113 @@ namespace pugi
|
||||
_root = 0;
|
||||
}
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
PUGI__FN void xml_document::_move(xml_document& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT
|
||||
{
|
||||
impl::xml_document_struct* doc = static_cast<impl::xml_document_struct*>(_root);
|
||||
impl::xml_document_struct* other = static_cast<impl::xml_document_struct*>(rhs._root);
|
||||
|
||||
// save first child pointer for later; this needs hash access
|
||||
xml_node_struct* other_first_child = other->first_child;
|
||||
|
||||
#ifdef PUGIXML_COMPACT
|
||||
// reserve space for the hash table up front; this is the only operation that can fail
|
||||
// if it does, we have no choice but to throw (if we have exceptions)
|
||||
if (other_first_child)
|
||||
{
|
||||
size_t other_children = 0;
|
||||
for (xml_node_struct* node = other_first_child; node; node = node->next_sibling)
|
||||
other_children++;
|
||||
|
||||
// in compact mode, each pointer assignment could result in a hash table request
|
||||
// during move, we have to relocate document first_child and parents of all children
|
||||
// normally there's just one child and its parent has a pointerless encoding but
|
||||
// we assume the worst here
|
||||
if (!other->_hash->reserve(other_children + 1))
|
||||
{
|
||||
#ifdef PUGIXML_NO_EXCEPTIONS
|
||||
return;
|
||||
#else
|
||||
throw std::bad_alloc();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// move allocation state
|
||||
doc->_root = other->_root;
|
||||
doc->_busy_size = other->_busy_size;
|
||||
|
||||
// move buffer state
|
||||
doc->buffer = other->buffer;
|
||||
doc->extra_buffers = other->extra_buffers;
|
||||
_buffer = rhs._buffer;
|
||||
|
||||
#ifdef PUGIXML_COMPACT
|
||||
// move compact hash; note that the hash table can have pointers to other but they will be "inactive", similarly to nodes removed with remove_child
|
||||
doc->hash = other->hash;
|
||||
doc->_hash = &doc->hash;
|
||||
|
||||
// make sure we don't access other hash up until the end when we reinitialize other document
|
||||
other->_hash = 0;
|
||||
#endif
|
||||
|
||||
// move page structure
|
||||
impl::xml_memory_page* doc_page = PUGI__GETPAGE(doc);
|
||||
assert(doc_page && !doc_page->prev && !doc_page->next);
|
||||
|
||||
impl::xml_memory_page* other_page = PUGI__GETPAGE(other);
|
||||
assert(other_page && !other_page->prev);
|
||||
|
||||
// relink pages since root page is embedded into xml_document
|
||||
if (impl::xml_memory_page* page = other_page->next)
|
||||
{
|
||||
assert(page->prev == other_page);
|
||||
|
||||
page->prev = doc_page;
|
||||
|
||||
doc_page->next = page;
|
||||
other_page->next = 0;
|
||||
}
|
||||
|
||||
// make sure pages point to the correct document state
|
||||
for (impl::xml_memory_page* page = doc_page->next; page; page = page->next)
|
||||
{
|
||||
assert(page->allocator == other);
|
||||
|
||||
page->allocator = doc;
|
||||
|
||||
#ifdef PUGIXML_COMPACT
|
||||
// this automatically migrates most children between documents and prevents ->parent assignment from allocating
|
||||
if (page->compact_shared_parent == other)
|
||||
page->compact_shared_parent = doc;
|
||||
#endif
|
||||
}
|
||||
|
||||
// move tree structure
|
||||
assert(!doc->first_child);
|
||||
|
||||
doc->first_child = other_first_child;
|
||||
|
||||
for (xml_node_struct* node = other_first_child; node; node = node->next_sibling)
|
||||
{
|
||||
#ifdef PUGIXML_COMPACT
|
||||
// most children will have migrated when we reassigned compact_shared_parent
|
||||
assert(node->parent == other || node->parent == doc);
|
||||
|
||||
node->parent = doc;
|
||||
#else
|
||||
assert(node->parent == other);
|
||||
node->parent = doc;
|
||||
#endif
|
||||
}
|
||||
|
||||
// reset other document
|
||||
new (other) impl::xml_document_struct(PUGI__GETPAGE(other));
|
||||
rhs._buffer = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef PUGIXML_NO_STL
|
||||
PUGI__FN xml_parse_result xml_document::load(std::basic_istream<char, std::char_traits<char> >& stream, unsigned int options, xml_encoding encoding)
|
||||
{
|
||||
@ -10307,16 +10453,9 @@ PUGI__NS_BEGIN
|
||||
size_t count = 1;
|
||||
for (xpath_ast_node* nc = _right; nc; nc = nc->_next) count++;
|
||||
|
||||
// gather all strings
|
||||
xpath_string static_buffer[4];
|
||||
xpath_string* buffer = static_buffer;
|
||||
|
||||
// allocate on-heap for large concats
|
||||
if (count > sizeof(static_buffer) / sizeof(static_buffer[0]))
|
||||
{
|
||||
buffer = static_cast<xpath_string*>(stack.temp->allocate(count * sizeof(xpath_string)));
|
||||
if (!buffer) return xpath_string();
|
||||
}
|
||||
// allocate a buffer for temporary string objects
|
||||
xpath_string* buffer = static_cast<xpath_string*>(stack.temp->allocate(count * sizeof(xpath_string)));
|
||||
if (!buffer) return xpath_string();
|
||||
|
||||
// evaluate all strings to temporary stack
|
||||
xpath_stack swapped_stack = {stack.temp, stack.result};
|
||||
@ -11913,7 +12052,7 @@ namespace pugi
|
||||
}
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
PUGI__FN void xpath_node_set::_move(xpath_node_set& rhs)
|
||||
PUGI__FN void xpath_node_set::_move(xpath_node_set& rhs) PUGIXML_NOEXCEPT
|
||||
{
|
||||
_type = rhs._type;
|
||||
_storage = rhs._storage;
|
||||
@ -11956,12 +12095,12 @@ namespace pugi
|
||||
}
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
PUGI__FN xpath_node_set::xpath_node_set(xpath_node_set&& rhs): _type(type_unsorted), _begin(&_storage), _end(&_storage)
|
||||
PUGI__FN xpath_node_set::xpath_node_set(xpath_node_set&& rhs) PUGIXML_NOEXCEPT: _type(type_unsorted), _begin(&_storage), _end(&_storage)
|
||||
{
|
||||
_move(rhs);
|
||||
}
|
||||
|
||||
PUGI__FN xpath_node_set& xpath_node_set::operator=(xpath_node_set&& rhs)
|
||||
PUGI__FN xpath_node_set& xpath_node_set::operator=(xpath_node_set&& rhs) PUGIXML_NOEXCEPT
|
||||
{
|
||||
if (this == &rhs) return *this;
|
||||
|
||||
@ -12156,7 +12295,7 @@ namespace pugi
|
||||
}
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
PUGI__FN xpath_variable_set::xpath_variable_set(xpath_variable_set&& rhs)
|
||||
PUGI__FN xpath_variable_set::xpath_variable_set(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT
|
||||
{
|
||||
for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i)
|
||||
{
|
||||
@ -12165,7 +12304,7 @@ namespace pugi
|
||||
}
|
||||
}
|
||||
|
||||
PUGI__FN xpath_variable_set& xpath_variable_set::operator=(xpath_variable_set&& rhs)
|
||||
PUGI__FN xpath_variable_set& xpath_variable_set::operator=(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT
|
||||
{
|
||||
for (size_t i = 0; i < sizeof(_data) / sizeof(_data[0]); ++i)
|
||||
{
|
||||
@ -12359,7 +12498,7 @@ namespace pugi
|
||||
}
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
PUGI__FN xpath_query::xpath_query(xpath_query&& rhs)
|
||||
PUGI__FN xpath_query::xpath_query(xpath_query&& rhs) PUGIXML_NOEXCEPT
|
||||
{
|
||||
_impl = rhs._impl;
|
||||
_result = rhs._result;
|
||||
@ -12367,7 +12506,7 @@ namespace pugi
|
||||
rhs._result = xpath_parse_result();
|
||||
}
|
||||
|
||||
PUGI__FN xpath_query& xpath_query::operator=(xpath_query&& rhs)
|
||||
PUGI__FN xpath_query& xpath_query::operator=(xpath_query&& rhs) PUGIXML_NOEXCEPT
|
||||
{
|
||||
if (this == &rhs) return *this;
|
||||
|
||||
@ -12594,6 +12733,10 @@ namespace pugi
|
||||
# pragma warning(pop)
|
||||
#endif
|
||||
|
||||
#if defined(_MSC_VER) && defined(__c2__)
|
||||
# pragma clang diagnostic pop
|
||||
#endif
|
||||
|
||||
// Undefine all local macros (makes sure we're not leaking macros in header-only mode)
|
||||
#undef PUGI__NO_INLINE
|
||||
#undef PUGI__UNLIKELY
|
||||
@ -12628,7 +12771,7 @@ namespace pugi
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Copyright (c) 2006-2017 Arseny Kapoulkine
|
||||
* Copyright (c) 2006-2018 Arseny Kapoulkine
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
|
@ -1,7 +1,7 @@
|
||||
/**
|
||||
* pugixml parser - version 1.8
|
||||
* pugixml parser - version 1.9
|
||||
* --------------------------------------------------------
|
||||
* Copyright (C) 2006-2017, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
* Copyright (C) 2006-2018, by Arseny Kapoulkine (arseny.kapoulkine@gmail.com)
|
||||
* Report bugs and download new versions at http://pugixml.org/
|
||||
*
|
||||
* This library is distributed under the MIT License. See notice at the end
|
||||
@ -13,7 +13,7 @@
|
||||
|
||||
#ifndef PUGIXML_VERSION
|
||||
// Define version macro; evaluates to major * 100 + minor so that it's safe to use in less-than comparisons
|
||||
# define PUGIXML_VERSION 180
|
||||
# define PUGIXML_VERSION 190
|
||||
#endif
|
||||
|
||||
// Include user configuration file (this can define various configuration macros)
|
||||
@ -81,10 +81,30 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// If C++ is 2011 or higher, add 'noexcept' specifiers
|
||||
#ifndef PUGIXML_NOEXCEPT
|
||||
# if __cplusplus >= 201103
|
||||
# define PUGIXML_NOEXCEPT noexcept
|
||||
# elif defined(_MSC_VER) && _MSC_VER >= 1900
|
||||
# define PUGIXML_NOEXCEPT noexcept
|
||||
# else
|
||||
# define PUGIXML_NOEXCEPT
|
||||
# endif
|
||||
#endif
|
||||
|
||||
// Some functions can not be noexcept in compact mode
|
||||
#ifdef PUGIXML_COMPACT
|
||||
# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT
|
||||
#else
|
||||
# define PUGIXML_NOEXCEPT_IF_NOT_COMPACT PUGIXML_NOEXCEPT
|
||||
#endif
|
||||
|
||||
// If C++ is 2011 or higher, add 'override' qualifiers
|
||||
#ifndef PUGIXML_OVERRIDE
|
||||
# if __cplusplus >= 201103
|
||||
# define PUGIXML_OVERRIDE override
|
||||
# elif defined(_MSC_VER) && _MSC_VER >= 1700
|
||||
# define PUGIXML_OVERRIDE override
|
||||
# else
|
||||
# define PUGIXML_OVERRIDE
|
||||
# endif
|
||||
@ -983,6 +1003,7 @@ namespace pugi
|
||||
|
||||
void _create();
|
||||
void _destroy();
|
||||
void _move(xml_document& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT;
|
||||
|
||||
public:
|
||||
// Default constructor, makes empty document
|
||||
@ -991,6 +1012,12 @@ namespace pugi
|
||||
// Destructor, invalidates all node/attribute handles to this document
|
||||
~xml_document();
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
// Move semantics support
|
||||
xml_document(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT;
|
||||
xml_document& operator=(xml_document&& rhs) PUGIXML_NOEXCEPT_IF_NOT_COMPACT;
|
||||
#endif
|
||||
|
||||
// Removes all nodes, leaving the empty document
|
||||
void reset();
|
||||
|
||||
@ -1131,8 +1158,8 @@ namespace pugi
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
// Move semantics support
|
||||
xpath_variable_set(xpath_variable_set&& rhs);
|
||||
xpath_variable_set& operator=(xpath_variable_set&& rhs);
|
||||
xpath_variable_set(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT;
|
||||
xpath_variable_set& operator=(xpath_variable_set&& rhs) PUGIXML_NOEXCEPT;
|
||||
#endif
|
||||
|
||||
// Add a new variable or get the existing one, if the types match
|
||||
@ -1175,8 +1202,8 @@ namespace pugi
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
// Move semantics support
|
||||
xpath_query(xpath_query&& rhs);
|
||||
xpath_query& operator=(xpath_query&& rhs);
|
||||
xpath_query(xpath_query&& rhs) PUGIXML_NOEXCEPT;
|
||||
xpath_query& operator=(xpath_query&& rhs) PUGIXML_NOEXCEPT;
|
||||
#endif
|
||||
|
||||
// Get query expression return type
|
||||
@ -1316,8 +1343,8 @@ namespace pugi
|
||||
|
||||
#ifdef PUGIXML_HAS_MOVE
|
||||
// Move semantics support
|
||||
xpath_node_set(xpath_node_set&& rhs);
|
||||
xpath_node_set& operator=(xpath_node_set&& rhs);
|
||||
xpath_node_set(xpath_node_set&& rhs) PUGIXML_NOEXCEPT;
|
||||
xpath_node_set& operator=(xpath_node_set&& rhs) PUGIXML_NOEXCEPT;
|
||||
#endif
|
||||
|
||||
// Get collection type
|
||||
@ -1351,7 +1378,7 @@ namespace pugi
|
||||
xpath_node* _end;
|
||||
|
||||
void _assign(const_iterator begin, const_iterator end, type_t type);
|
||||
void _move(xpath_node_set& rhs);
|
||||
void _move(xpath_node_set& rhs) PUGIXML_NOEXCEPT;
|
||||
};
|
||||
#endif
|
||||
|
||||
@ -1409,7 +1436,7 @@ namespace std
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Copyright (c) 2006-2017 Arseny Kapoulkine
|
||||
* Copyright (c) 2006-2018 Arseny Kapoulkine
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person
|
||||
* obtaining a copy of this software and associated documentation
|
||||
|
Loading…
Reference in New Issue
Block a user