summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-10-07Refactor decode_utfN_block and decode_latin1_blockArseny Kapoulkine
Make sure the looping structure is the same as in decode_utf8_block.
2015-10-07Simplify file/stream loading flowArseny Kapoulkine
Instead of calling xml_document public functions just call implementation of load_buffer_inplace_own. This makes it so we only call reset() once during load_file/load.
2015-10-06tests: Add a copy of header-only testArseny Kapoulkine
This makes sure we get linking errors whenever a symbol is not marked as inline in header-only mode.
2015-10-06Merge pull request #58 from Breush/patch-1Arseny Kapoulkine
Fixed missing PUGI__FN
2015-10-06Fixed missing PUGI__FNA. Breust
2015-09-23scripts: Enable C++11 in CMakeListsArseny Kapoulkine
We now make sure that in CMake builds we have long long support. This requires CMake 3.1 for target_compile_features. Fixes #53 (as long as packages use this CMake script... most of them do)
2015-09-21Fix parsing of integers that start with +Arseny Kapoulkine
This matches the format strtol supports.
2015-09-20Merge pull request #56 from zeux/travis-osxArseny Kapoulkine
Add OSX to Travis CI config
2015-09-20build: Reduce the build matrixArseny Kapoulkine
We don't need to test gcc on OSX
2015-09-20build: Add OSX to Travis configArseny Kapoulkine
2015-09-20Fix signed/unsigned warnings for MSVCArseny Kapoulkine
2015-09-20tests: Add tests for integer overflow during conversionArseny Kapoulkine
These tests are only testing attribute as_int in hopes that xml_text uses the same underlying implementation (which it does).
2015-09-20Implement custom string to integer conversionArseny Kapoulkine
This makes conversion significantly faster and removes more CRT dependencies; in particular, to support long long pugixml only requires the type itself (and the division operator...). New implementation is up to 3x faster on short decimal numbers. Note that unlike the old implementation, new implementation correctly handles overflow and underflow and clamps the value to the representable range. This means that there are some behavior changes - e.g. previously as_uint on "-1" would return INT_MAX instead of 0. In addition to CRT issues, for platforms with 64-bit long old implementation incorrectly truncated from long to int or unsigned int, so even if CRT clamped the values the result would have been incorrect.
2015-09-20Remove extra const from operator= declarationArseny Kapoulkine
This does not really matter too much but it's better to be consistent.
2015-09-20Inline widen_ascii to get rid of an extra strlen callArseny Kapoulkine
Also since this function is only used once and is not defined in regular mode to avoid warnings this simplifies code a bit.
2015-09-20Eliminate redundant strlen calls during set_value/setArseny Kapoulkine
Since we use manual integer conversion we know the length of the string. This makes set_value(int) ~30% faster for 4-digit numbers.
2015-09-20Force callers of strcpy_insitu to compute string lengthArseny Kapoulkine
This makes it possible to avoid calling strlen if we already know the string size.
2015-09-20Implement integer to string conversion manuallyArseny Kapoulkine
This reduces the amount of non-standard C++ functionality pugixml may be using by avoiding sprintf with %lld; additionally this implementation is significantly faster (4-5x) than sprintf, mostly due to avoiding format string parsing and stream setup that commonly happens in CRT implementations. This comes at the expense of requiring long long division/remainder operations if PUGIXML_USE_LONG_LONG is defined which will surely bite me one day.
2015-09-19tests: Convert several files to Unix line endingsArseny Kapoulkine
They were still using Windows EOL by mistake
2015-08-25Update README.mdArseny Kapoulkine
2015-08-25build: Fix -o gcov optionArseny Kapoulkine
Also upload just pugixml.cpp.gcov to codecov to avoid issues the script has with old gcov.
2015-08-25build: Rework config=coverage to be more robustArseny Kapoulkine
Use find -exec instead of xargs to work around differences between xargs on OSX and Linux. Use -b option of gcov - for some reason gcov on Travis can't find .gcno files otherwise (old version?). And finally enable config=coverage again.
2015-08-25build: Disable config=coverage for nowArseny Kapoulkine
2015-08-25build: Actually use config=coverageArseny Kapoulkine
2015-08-25build: Test codecov.io integrationArseny Kapoulkine
2015-08-25build: Simplify coverage configurationArseny Kapoulkine
Use -coverage option and keep NDEBUG off
2015-08-14docs: Clarify UTF-8 vs wchar_t memory efficiencyArseny Kapoulkine
2015-08-14docs: Add PUGIXML_COMPACT documentationArseny Kapoulkine
Also add PUGIXML_COMPACT to pugiconfig.hpp
2015-08-14Minor get_integer_base optimizationArseny Kapoulkine
Remove an extra branch.
2015-07-26Fix two UB sanitizer false positivesArseny Kapoulkine
Change the expression to reference the array element indirectly. The memory block can be bigger than the structure so it's invalid to use static data[] size for bounds checking.
2015-07-25XPath: Increase memory block alignment to 8 bytesArseny Kapoulkine
To be more precise, the memory block is now aligned to be able to reliably allocate objects with both double and pointer fields. If there is a platform with a 4-byte double and a 4-byte pointer, the memory block alignment there will stay the same after this change. Fixes #48.
2015-07-25tests: Fix test allocator to provide fundamental alignmentArseny Kapoulkine
Previously test allocator only guaranteed alignment enough for a pointer. On some platforms (e.g. SPARC) double has to be aligned to 8 bytes but pointers can have a size of 4 bytes. This commit increases allocation header to fix that. In practical terms the allocation header is now always 8 bytes.
2015-07-25XPath: Refactor block allocationArseny Kapoulkine
Extract memory page size and block alignment into named constants.
2015-07-25tests: Only enable page heap on x86/x64Arseny Kapoulkine
This fixes tests in PUGIXML_NO_XPATH mode on SPARC64 (#48). SPARC does not allow unaligned accesses - e.g. you can't read an unaligned int. Normally pugixml does not perform unaligned integer/pointer accesses, but page heap can allocate blocks that are not aligned so that we can detect a single- byte read/write overrun. Additionally, the hardcoded page size we're currently using is really system specific - on SPARC the page size can be 8 Kb instead of 4 Kb so mprotect can fail.
2015-07-22XPath: Split optimize into optimize and optimize_selfArseny Kapoulkine
This makes the code slightly more readable, but more importantly it fixes a false positive in Clang static analyzer. Fixes #47.
2015-06-24docs: Clarify hash_value behaviorArseny Kapoulkine
Fixes #43.
2015-06-13Makefile now supports Xcode 7 ASANArseny Kapoulkine
All other sanitizers are still unavailable so only enable them on non-OSX systems.
2015-06-12Fix Clang 3.7 compatibilityArseny Kapoulkine
Apparently Clang 3.7 implements C++ DR 1748 that makes placement new with null pointer undefined behavior. Which renders all C++ programs that rely on this invalid. Which includes pugixml. This is not very likely to happen in the wild because the allocations that are subject to this in pugixml are relatively small, but tests break because of this. Fix the issue by adding null pointer checks (that are completely redundant in all current compilers except Clang 3.7 but it's not like there is another option).
2015-05-22tests: Add newline at the end of fileArseny Kapoulkine
2015-05-22Fix MSVC7 compilationArseny Kapoulkine
Work around a name lookup bug by pulling auto_deleter name in the local scope. We could also move auto_deleter to pugi:: namespace, but that pollutes it unnecessarily for other compilers.
2015-05-22tests: Fix MSVC6 compilationArseny Kapoulkine
2015-05-22Move default value handling into as_ functionsArseny Kapoulkine
This makes get_value_* simpler and also works around DMC compilation issue.
2015-05-20XPath: Use strtod instead of atofArseny Kapoulkine
This makes code more consistent between wchar/utf8 mode.
2015-05-20tests: Split fp roundtrip test into float and doubleArseny Kapoulkine
2015-05-14Implement xml_node::attribute with a hintArseny Kapoulkine
Extra argument 'hint' is used to start the attribute lookup; if the attribute is not found the lookup is restarted from the beginning of the attriubte list. This allows to optimize attribute lookups if you need to get many attributes from the node and can make assumptions about the likely ordering. The code is correct regardless of the order, but it is faster than using vanilla lookups if the order matches the calling order. Fixes #30.
2015-05-12tests: Fix address sanitizer detection for GCCArseny Kapoulkine
2015-05-12Add config=sanitize support to MakefileArseny Kapoulkine
2015-05-12Add Visual Studio 2015 to AppVeyorArseny Kapoulkine
2015-05-12tests: Disable page allocator if address sanitizer is activeArseny Kapoulkine
Address sanitizer can detect underflows so we don't really need the custom allocator. Additionally, custom allocator can return memory that is not pointer-aligned; this causes undefined behavior sanitizer to complain.
2015-05-12tests: Fix clang 3.7 warningArseny Kapoulkine
Work around -Wself-move using ref-deref.