summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2014-11-17Rename xml_document::load to load_stringArseny Kapoulkine
This should completely eliminate the confusion between load and load_file. Of course, for compatibility reasons we have to preserve the old variant - it will be deprecated in a future version and subsequently removed.
2014-11-17tests: Don't use /dev/ttyArseny Kapoulkine
The behavior on OSX is different - we don't get a I/O error so the test is useless.
2014-11-16docs: Replace Subversion links with GitArseny Kapoulkine
2014-11-08Reduce required page alignment to 32Arseny Kapoulkine
Since we no longer have a name/value pair in nodes we need one less bit to represent allocated flags. This reduces the page overhead by 32 bytes.
2014-11-07Merge branch 'master' into compactArseny Kapoulkine
2014-11-07XPath: Partially inline xpath_node_set_raw::push_backArseny Kapoulkine
Previously push_back implementation was too big to inline; now the common case (no realloc) is small and realloc variant is explicitly marked as no-inline. This is similar to xml_allocator::allocate_memory/allocate_memory_oob and makes some XPath queries 5% faster.
2014-11-07XPath: Only call apply_predicates if necessaryArseny Kapoulkine
In some cases constant overhead on step evaluation is important - i.e. for queries that evaluate a simple step in a predicate expression. Eliminating a redundant function call thus can prove worthwhile. This change makes some queries (e.g. //*[not(*)]) 4% faster.
2014-11-06Revert "Change Travis config to build on Linux/OSX"Arseny Kapoulkine
This reverts commit 98713bcba94b33b1b45a8891ac2e9e11305c7553. Travis multi-OS feature is invite-only for now...
2014-11-06Change Travis config to build on Linux/OSXArseny Kapoulkine
Hopefully OSX defaults to clang so we get as much coverage as before...
2014-11-06Fix compact mode compilationArseny Kapoulkine
Clang and gcc seem to treat string literals differently...
2014-11-06tests: Fix all tests for compact modeArseny Kapoulkine
Memory allocation behavior is different in compact mode so tests that rely on current behavior have to be adjusted.
2014-11-06Add compact build configuration to TravisArseny Kapoulkine
2014-11-06Verify that compact page encoding is safeArseny Kapoulkine
Since page size can be customized let's do a special validation check for compact encoding. Right now it's redundant since page size is limited by 64k in alloc_string, but that may change in the future.
2014-11-06Add a separate storage class for PI nodesArseny Kapoulkine
This allows us to add pi value to restore target support for PI nodes without increasing the memory usage for other nodes. Right now the PI node has a separate header that's used for allocated bit; this allows us to reduce header bitcount in the future.
2014-11-05Ensure selected page size works with allocate_stringArseny Kapoulkine
Previously setting a large page size (i.e. 1M) would cause dynamic string allocation to assert spuriously. A page size of 64K guarantees that all offsets fit into 16 bits.
2014-11-05Fix xml_node::offset_debug for corner casesArseny Kapoulkine
Computed offsets for documents with nodes that were added using append_buffer or newly appended nodes without name/value information were invalid.
2014-11-05Use impl::get_document instead of root() where possibleArseny Kapoulkine
This reduces the number of unsafe pointer manipulations.
2014-11-05Remove redundant branchesArseny Kapoulkine
These used to result in better codegen for unknown reasons, but this is no longer the case.
2014-11-04Fix gcc warnings in compact modeArseny Kapoulkine
2014-11-04Merge branch 'master' into compactArseny Kapoulkine
2014-11-03:Merge remote-tracking branch 'upstream/master'Matthias Loy
2014-11-03XPath: Refactor predicate applicationArseny Kapoulkine
Split number/boolean filtering logic into two functions. This creates an extra copy of a remove_if-like algorithm, but moves the type check out of the loop and results in better organized filtering code. Consolidate test-based dispatch into apply_predicate (which is now a member function).
2014-11-03tests: Add more XPath mod testsArseny Kapoulkine
2014-11-02Fix undefined behavior while calling memcpyArseny Kapoulkine
Calling memcpy(x, 0, 0) is technically undefined (although it should usually be a no-op).
2014-11-01tests: Improve test coverageArseny Kapoulkine
2014-11-01XPath: Fix undefined behavior while calling memcpyArseny Kapoulkine
Calling memcpy(x, 0, 0) is technically undefined (although it should usually be a no-op). Fixes #20.
2014-11-01Fix first-time make config=coverage testArseny Kapoulkine
Not sure why xargs -r is not the default...
2014-10-30load_buffer_impl always checks if buffer is valid pointer and size > 0mloy
added some tests to force invalid buffer and size = 0
2014-10-28Fix compilation after merge.Arseny Kapoulkine
2014-10-28Merge branch 'master' into compactArseny Kapoulkine
2014-10-28Fix several cppcheck warnings.Arseny Kapoulkine
2014-10-27Optimize node printing by using raw pointersArseny Kapoulkine
This lets us do fewer null pointer checks (making printing 2% faster with -O3) and removes a lot of function calls (making printing 20% faster with -O0).
2014-10-27XPath: Optimize [position()=expr] and [last()]Arseny Kapoulkine
To get more benefits from constant predicate/filter optimization we rewrite [position()=expr] predicates into [expr] for numeric expressions. Right now the rewrite is only for entire expressions - it may be beneficial to split complex expressions like [position()=constant and expr] into [constant][expr] but that is more complicated. last() does not depend on the node set contents so is "constant" as far as our optimization is concerned so we can evaluate it once.
2014-10-26XPath: Only recognize numeric constant expressionsArseny Kapoulkine
Numeric and boolean constant expressions in filters are different in that to evaluate numeric expressions we need a sorted order, but to evaluate boolean expressions we don't. The previously implemented optimization adds an extra sorting step for constant boolean filters that will be more expensive than redundant computations. Since constant booleans are sort of an edge case, don't do this optimization. This allows us to simplify apply_predicate_const to only handle numbers.
2014-10-26XPath: Unify ast_filter/ast_predicate structureArseny Kapoulkine
Now expression is always _right for filter/predicate nodes to make optimize() simpler. Additionally we now use predicate metadata to make is_posinv_step() faster. This introduces a weak ordering dependency in rewrite rules to optimize() - classification has to be performed before other optimizations.
2014-10-26XPath: Optimize constant filters/predicatesArseny Kapoulkine
If a filter/predicate expression is a constant, we don't need to evaluate it for every nodeset element - we can evaluate it once and pick the right element or keep/discard the entire collection. If the expression is 1, we can early out on first node when evaluating the node set - queries like following::item[1] are now significantly faster. Additionally this change refactors filters/predicates to have additional metadata describing the expression type in _test field that is filled during optimization. Note that predicate_constant selection right now is very simple (but captures most common use cases except for maybe [last()]).
2014-10-26tests: Remove git2svn helper script!Arseny Kapoulkine
2014-10-26Update README.md with new documentation URLs.Arseny Kapoulkine
2014-10-26tests: Add a way for tests to verify allocation failureArseny Kapoulkine
git-svn-id: https://pugixml.googlecode.com/svn/trunk@1081 99668b35-9821-0410-8761-19e4c4f06640
2014-10-25Fix node copying for some out of memory casesArseny Kapoulkine
A page can fail to allocate during attribute creation; this case was not previously handled. git-svn-id: https://pugixml.googlecode.com/svn/trunk@1080 99668b35-9821-0410-8761-19e4c4f06640
2014-10-25Add 'coverage' configuration to Makefile.Arseny Kapoulkine
git-svn-id: https://pugixml.googlecode.com/svn/trunk@1079 99668b35-9821-0410-8761-19e4c4f06640
2014-10-25Remove redundant null pointer checks.Arseny Kapoulkine
When removing a node or attribute, we know that the parent has at least one node/attribute so a null pointer check is redundant. git-svn-id: https://pugixml.googlecode.com/svn/trunk@1078 99668b35-9821-0410-8761-19e4c4f06640
2014-10-24tests: Fix test failure in PUGIXML_WCHAR_MODEArseny Kapoulkine
git-svn-id: https://pugixml.googlecode.com/svn/trunk@1077 99668b35-9821-0410-8761-19e4c4f06640
2014-10-24tests: Add even more coverage testsArseny Kapoulkine
Also fix MSVC6 compilation (make convertions to function pointers explicit). git-svn-id: https://pugixml.googlecode.com/svn/trunk@1076 99668b35-9821-0410-8761-19e4c4f06640
2014-10-23tests: Add more tests for better coverageArseny Kapoulkine
More tests for out-of-memory and other edge conditions git-svn-id: https://pugixml.googlecode.com/svn/trunk@1075 99668b35-9821-0410-8761-19e4c4f06640
2014-10-23tests: Improve test coverageArseny Kapoulkine
git-svn-id: https://pugixml.googlecode.com/svn/trunk@1074 99668b35-9821-0410-8761-19e4c4f06640
2014-10-21Fix compact modeArseny Kapoulkine
2014-10-21Merge branch 'master' into compactArseny Kapoulkine
2014-10-22XPath: Optimize predicate evaluationArseny Kapoulkine
If the requested evaluation mode is not _all, we can use this mode for the last predicate/filter expression and exit early. git-svn-id: https://pugixml.googlecode.com/svn/trunk@1073 99668b35-9821-0410-8761-19e4c4f06640
2014-10-22XPath: Use node pointers in step_push/step_fillArseny Kapoulkine
Using pointers instead of node/attribute objects allows us to use knowledge about the tree to guarantee that pointers are not null. This results in less null checks (10-20% speedup with optimizations enabled) and less function calls (5x speedup with optimizations disabled). git-svn-id: https://pugixml.googlecode.com/svn/trunk@1072 99668b35-9821-0410-8761-19e4c4f06640