summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2018-05-17docs: Mention that node is a container of children in ranged for sectionHEADmasterArseny Kapoulkine
This is implicitly true due to the following section, but that was written before C++11 so this does deserve a special mention in ranged for section as well. Fixes #210.
2018-04-27Move CMake build postfix setup behind an off-by-default USE_POSTFIXArseny Kapoulkine
This setup can interfere with existing workflows in two ways: - If the target application used CMake and configured custom postfixes, this change would override them - If the target application did *not* use CMake, it'd have to abide by these conventions even if the target configuration used is unexpected - for example, the default "preferred" configuration is frequently RelWithDebugInfo, not Release, which now has a postfix. Fixes #198.
2018-04-14Clarify comment in get_strconv_pcdata as wellArseny Kapoulkine
2018-04-14Clarify comment in get_strconv_attributeArseny Kapoulkine
This might have helped a bit with confusion in #195.
2018-04-12Update README.mdArseny Kapoulkine
Add example code
2018-04-12scripts: Use LICENSE file in pugixml.podspecArseny Kapoulkine
We no longer need to specify the license boilerplate verbatim since we have a separate file.
2018-04-11Suffixes for different build types (#191)Alexander Straub
2018-04-11Add brief license information back to README.mdArseny Kapoulkine
Also rename LICENSE to LICENSE.md
2018-04-11Split LICENSE to a separate file for easier distributionBruno Pagani
Also fix two http → https occurrences.
2018-04-09cmake: always install the pkg-config file (#193)Eli Schwartz
There's really never a reason to *not* want this installed. If an option is needed to specify installing in a versioned subdirectory, this option should be explicitly described rather than hidden in something else. As an added bonus, this makes the CMake install code slightly *less* complicated.
2018-04-04docs: Fix changelog formattingArseny Kapoulkine
2018-04-04tests: Fix PUGIXML_COMPACT build on some platformsv1.9Arseny Kapoulkine
We need bad_alloc that lives in <new>, not <exception>.
2018-04-03tests: Fix PUGIXML_NO_XPATH,PUGIXML_COMPACT buildArseny Kapoulkine
pugixml.hpp wasn't including the <exception> header in this build but test code needed it.
2018-04-03tests: Fix PUGIXML_NO_XPATH buildArseny Kapoulkine
2018-04-02tests: Fix PUGIXML_NO_EXCEPTIONS testsArseny Kapoulkine
2018-04-02docs: Regenerate HTML documentationArseny Kapoulkine
2018-04-02Update version to 1.9Arseny Kapoulkine
2018-04-02tests: Fix PUGIXML_NO_STL buildArseny Kapoulkine
2018-04-02docs: Update changelogArseny Kapoulkine
2018-04-02Work around gcc-8 warningArseny Kapoulkine
gcc-8 produces "attribute directive ignored" warning for no_sanitize("unsigned-integer-overflow"); at some point gcc will introduce integer sanitizer support and we'll have to do this all over again but for now just don't emit the attribute.
2018-04-02docs: Update v1.9 release date to 04.04Arseny Kapoulkine
2018-03-29Add a comment to clarify subtle branch in node_copy_treeArseny Kapoulkine
2018-03-16docs: Update changelogArseny Kapoulkine
Mention ubsan fixes; these fixes probably fix compact mode on some 64-bit architecture where unaligned pointer reads aren't valid as well but it's probably not very relevant...
2018-03-16tests: Fix PUGIXML_COMPACT+PUGIXML_WCHAR_MODE testsArseny Kapoulkine
Several tests got the buffer size wrong when sizeof(char_t)>1, and one test didn't meet the carefully tuned allocation criteria under compact mode due to the hash table usage and had to be changed a bit.
2018-03-16ubsan: Fix undefined behavior for signed left shift in compact modeArseny Kapoulkine
We were using << compact_alignment_log2 instead of * compact_alignment for symmetry with the encoding where >> is crucial to keep code fast and round to negative infinity. For decoding, the results are the same and any reasonable compiler should convert *4 into <<2 so just use a multiplication - that doesn't trigger UB on negative numbers.
2018-03-15ubsan: Fix type mismatch for xml_extra_buffer in compact modeArseny Kapoulkine
We were using allocate_memory to allocate struct xml_extra_buffer that contains pointers; with compact mode, this allocation can be misaligned by 4b with 8b pointers; fix this by manually realigning the pointer.
2018-03-15ubsan: Fix type mismatch in compact mode for document dataArseny Kapoulkine
We were misaligning document data on 64-bit platforms by placing 8b pointers at 4b offsets; fix this by reserving a full pointer worth of bytes for page marker.
2018-03-15Refactor noexcept macrosArseny Kapoulkine
Define noexcept using _MSC_VER instead of _MSC_FULL_VER (first release of MSVC 2015 should have it), remove redundant PUGIXML_HAS_NOEXCEPT and define PUGIXML_NOEXCEPT_IF_NOT_COMPACT in terms of PUGIXML_NOEXCEPT.
2018-03-12docs: Add preliminary 1.9 changelogArseny Kapoulkine
Still trying to decide if the next version should be 1.9 or 1.8x and what other changes need to go in.
2018-03-03Adds noexcept specifiers to the move special members of xml_document,… (#185)Matthäus Brandl
* Adds noexcept specifiers to the move special members of xml_document, but only #ifndef PUGIXML_COMPACT
2018-03-01Add noexcept specifiers to move special members where possible (#183)Matthäus Brandl
* Adds a macro definition to be able to use noexcept with supporting compilers * Adds noexcept specifier to move special members of xpath_node_set, xpath_variable_set and xpath_query, but not of xml_document as it has a throwing implementation
2018-02-27Merge pull request #184 from brandl-muc/override_for_msvcArseny Kapoulkine
Enables usage of override specifier for MSVC compilers
2018-02-27Enables usage of override specifier for MSVC compilers (beginning with 17.0 ↵Brandl, Matthäus (MBR)
which is the compiler of Visual Studio 2012)
2018-02-27Fix Texas Instruments compiler warningArseny Kapoulkine
Texas Instruments compiler produces this warning for unused template member functions: "pugixml.cpp", line 253: warning #179-D: function "pugi::impl::<unnamed>::auto_deleter<T>::release [with T=pugi::impl::<unnamed>::xml_stream_chunk<char>]" was declared but never referenced As far as I can tell, this is a compiler issue - these functions should not be instantiated in the first place; while it's possible to rework the code to work around this, the changes would be fragile. It seems best to just disable this warning - we've seen something similar on SNC (which appears to use the same frontend!..). Fixes #182.
2018-02-22Work around gcc issues with limits.h not defining LLONG_MINArseny Kapoulkine
It looks like there are several cases where this might happen: - In some MinGW distributions, the LLONG_MIN/etc defines are guarded with: #if !defined(__STRICT_ANSI__) && defined(__GNUC__) Which means that you don't get them in strict ANSI mode. The previous workaround was specifically targeted towards this. - In some GCC distributions (notably GCC 6.3.0 in some configurations), LLONG_MIN/etc. defines are guarded with: #if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) But __STDC_VERSION__ isn't defined as C99 even if you use -std=c++14 - which is probably technically valid, but not useful. To work around this, redefine the symbols whenever we are building with GCC and we need them and they aren't defined - doing this is better than not building. Instead of hard-coding the constants, use GCC-specific __LONG_LONG_MAX__ to compute them. Fixes #181.
2018-01-29Merge pull request #179 from mathstuf/cmake-touchupsArseny Kapoulkine
Cmake touchups
2018-01-29cmake: keep sources and headers separateBen Boeckel
2018-01-29cmake: set the minimum version before the project callBen Boeckel
2018-01-23build: Add clang/Linux builds to TravisArseny Kapoulkine
2018-01-07Update all copyright notices to specify year 2018Arseny Kapoulkine
2017-12-29docs: Fix a typo in dom_tree.pngArseny Kapoulkine
<mesh> node attribute name is "name", not "mesh".
2017-12-22Merge pull request #177 from zeux/osx-fixArseny Kapoulkine
tests: Fix OSX test failure
2017-12-22tests: Fix OSX test failureArseny Kapoulkine
Apparently at some point OSX behavior when reading /dev/tty switched from "can't open the file" to "the file can be opened and 0 bytes can be read from it" which generates a wrong error and doesn't exercise the code path we care about.
2017-12-22docs: Fixed quickstart linksArseny Kapoulkine
Fixes #176.
2017-11-13Use raw pointers in xml_node::traverse implementationArseny Kapoulkine
This makes it a bit faster and matches other internal code better.
2017-11-13XPath: Always allocate xpath_strings on temporary stack for concatArseny Kapoulkine
The static_buffer optimization seems to come from the time where the on-heap buffer was allocated using global memory operations. At this point the temporary buffer and temporary string storage all come from the evaluation stack (that can be partially allocated on heap...), so the extra logic isn't relevant for performance.
2017-11-13Merge pull request #170 from zeux/moveArseny Kapoulkine
This change implements move ctor and assign support for xml_document. All node handles remain valid after the move and point to the new document; the only exception is the document node itself (that remains unmoved). Move is O(document size) in theory because it needs to relocate immediate document children (there is just one in conformant documents) and all memory pages; in practice the memory pages only need the header adjusted, which is ~0.1% of the actual data size. Move requires no allocations in general, except when using compact mode where some moves need to grow the hash table which can fail (throw). Fixes #104
2017-11-13Fix -Wshadow warningArseny Kapoulkine
2017-11-13tests: Add compact move testsArseny Kapoulkine
This helps make sure our error handling logic works and is exercised.
2017-11-13Implement correct move error handling for compact modeArseny Kapoulkine
In compact mode, we currently can not support zero-allocation moves since some pointer assignments required during the move need to allocate hash table slots. This is mostly applicable to xml_document_struct::first_child, since the pointer to this element is used as a hash table key, but there are some contrived cases where parents of root's children need a hash slot and didn't have it before. These cases can be fixed by changing the compact encoding to be a bit more move friendly, but for now it's easier to handle the error and throw/return during move. When this happens, the source document doesn't change.