All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
1.6.1 - 2023-04-13
- Renamed
CALLBACK
toCALLBACK_FN
to avoid conflicts with Windows SDK. #142 - Dead code cleanup.[#144](#144
- Removed copy constructor/assignment from bplus-maps. Added some fringe case tests. [#145](#145
1.6.0 - 2023-03-20
- Added benchmark for bit operations in
common
. #128 - Added
lower_bounds(key)
to API. #126 - Added
bpt_fixed_vector
, a fixed size flat vector for future use. It can be dropped in for an std::vector. #124 - Added Chebyshev distance metric
DistanceChebyshev
. #129
- Changed
bpt_vector
to usestd::destroy
i.o. default dstr. #132 - Moved B+trees into own namespace. #131
- Moved some stuff in
common
intonemaspace detail
. #129 - Improved kNN search implementation. This also deprecates the post-increment iterator. #118
- Replaced deprecated
<assert.h>
imports with<cassert>
. #134 - Fixes undefined behavior in debug method. #135
- API: Fixes
relocate()
return type to besize_t
. #136 - Fix constness of B+tree
check()
. #137 - Minor fixes for next release. #140
1.5.0 - 2023-02-09
- Added B+tree multimap for internal (future) use. #93
- Added some fuzz tests. Not that these require manual compilation, see fuzzer/README.md. #114
- Added float-32 variants to multimap: PhTreeMultiMapF, PhTreeMultiMapBoxF. #117
- Clean up array_map. #107,
- Fixed compatibility with bazel 6.0.0. #109,
- Added missing compiler flag for TZCNT/CTZ (count trailing zeros). This should be much faster on haswell or later CPUs. #103,
- Rewrote relocate(). This should be much cleaner now and slightly faster. #98, #99, #101, #104, #115
- Cleaned up HandleCollision() and key comparison functions. #97
- Improved performance by eliminating memory indirection for DIM > 3. This was enabled by referencing "Node" directly in "Entry" which was enabled by implanting an indirection in array_map. #96
- Improved performance of window queries by executing them partially as point queries. This works best for point datasets, and somewhat for box datasets with "include" queries. There is no benefit for "intersection" queries. #88
- Improved benchmarks for insert and query to use a more compact format. #91
- Improved performance of window queries by optimizing calculation of min/max masks. Improved performance of queries and updates by changing bit-width of min/max masks and hc_pos_t. #95
- bazel version requirement file
.bazelversion
. #89
- Fixed copy cstr/assignment of B+trees, see also #102. #119
- Fixed numerous warnings when compiling with MSVC. #120
1.4.0 - 2022-09-09
- Added build features: #53
- linting for C++ and bazel files.
- Added CI status badges.
- Added test coverage
- Added support for cmake
FetchContent
. See README for details. #75 - Added support for cmake
find_packet()
and direct import viaadd_sub_directory()
. See README for details. #83
- Cleaned up build scripts. #53
- Fixed code coverage + migrate to linux. #80
- BREAKING CHANGE The project has been restructured to have a more "standard" directory structure.
This affects how bazel dependencies work (use
deps = ["@phtree//:phtree",]
) and enables cmake FetchContent_. See README for details. #75
- Nothing.
- Nothing.
1.3.0 - 2022-08-28
- Added flag to relocate() allow short cutting in case of identical keys. #68
- Added tested support for move-only and copy-only value objects. #56
- Added custom bucket implementation (similar to std::unordered_set). This improves update performance by 5%-20%. #44
- Added
PhTree.relocate(old_key, new_key)
andPhTree.relocate_if(old_key, new_key, predicate)
. This is a lot faster than using other methods. #43 - Added try_emplace(key, value) and try_emplace(iter_hint, key, value) #40
- Added FilterBoxAABB and FilterSphereAABB as examples for filtering a PH-Tree with box keys #33
-
Moved tests and benchmarks into separate folders. #67
-
Cleaned up unit tests. #54
-
Simplified internals of
erase()
. #47 -
Removed internal use of
std::optional()
to slightly reduce memory overhead #38 -
Removed restrictions on bazel version #35
-
API BREAKING CHANGE: API of filters have been changed to be more correct, explicit and flexible. #21
- Correctness: Converters and distance functions are not copied unnecessarily anymore.
- Explicit:
Filters must have a mandatory parameter for a converter reference. This ensures that the correct
converter is used, probably
tree.converter()
. - Flexible: Distance functions can be provided through a universal reference (forwarding reference). Also, filters are now movable and copyable.
-
API BREAKING CHANGE: Allow filtering on buckets in multimaps. Multimap filters have different functions and function signatures than normal
PhTree
filters. #26
- Fixed compiler warnings when compiling with Visual Studio 2019. #74
- Fixed cmake to work with Visual Studio 2019. Added tests and benchmarks to cmake. (benchmarks still do not work with VS at the moment). #62
- Fixed compilation problems and a memory leak when compiling with Visual Studio 2019.
(also added
msan
support). #64
1.2.0 - 2022-04-14
- Bugfix: FilterSphere was not working correctly. #27
- Potentially BREAKING CHANGE: Refactored API of all methods that accept callbacks and filters to
accept universal/forwarding references.
Also changed filters and callback to not require
const
methods. #22 - Clean up iterator implementations. #19
- Make PhTree and PhTreeMultimap movable (move-assign/copy). #18
- Potentially BREAKING CHANGE when using
IsNodeValid()
in provided filters: Changedbit_width_t
fromuin16_t
touint32_t
. This improves performance of 3D insert/emplace on small datasets by up to 15%. To avoid warnings that meant that the API ofFilterAABB
andFilterSphere
had to be changed to acceptuint32_t
instead ofint
. This may break some implementations. #17 - DIM>8 now uses custom b_plus_tree_map instead of std::map. This improves performance for all operations, e.g. window queries on large datasets are up to 4x faster. Benchmarks results can be found in the issue. #14
- postfix/infix field moved from Node to Entry. This avoids indirections and improves performance of most by ~10%. operations by 5-15%. #11
- Entries now use 'union' to store children. #9
- Avoid unnecessary find() when removing a node. #5
- Avoid unnecessary key copy when inserting a node. #4
- for_each(callback, filter) was traversing too many nodes. #2
- Build improvements for bazel/cmake
1.1.1 - 2022-01-30
- Replaced size() in filters with DIM #26
1.1.0 - 2022-01-25
- FilterSphere for filtering by sphere constraint (by ctbur) #16
- IEEE converter for 32bit float, see
distance.h
(by ctbur) #18
- Performance improvement for updates and queries: removed use of
std::variant
. #23 - Fixed imports
<climits>
-><limits>
(by ctbur) #15 - Cleaned up build scripts #21
- Fixed warnings: #20
- "unused function argument" warnings
- gcc/clang warnings
- MSVC warnings
- reserved identifier warnings (identifiers starting with
_
)
- typos in README.md #22
1.0.1 - 2021-05-06
- replaced compilation flag
-fpermissive
with-Werror
, and fixed all warnings/errors, see issue #10
1.0.0 - 2021-03-23
- API:
MultiMap
: A wrapper that makes PH-Tree behave as a multi-map. - API:
erase(iterator)
- API:
emplace_hint(iterator, ...)
- API for
PhTreeF
andPhTreeBoxF
: 32bit floating point options - Support for custom key classes
- BREAKING CHANGE: The query functions now require a query box as input (instead of a min/max point pair)
- BREAKING CHANGE:
phtree_box_d.h
has been removed, please use `phtree.h instead. - BREAKING CHANGE:
phtree_d.h
has been removed, please usephtree.h
instead. - BREAKING CHANGE: Data converters (IEEE, Multiply, etc) are now structs i.o. functions/functors
- BREAKING CHANGE:
PhFilterNoOp
has been renamed toFilterNoOp
- BREAKING CHANGE: kNN queries now always require the distance function to be specified.
- BREAKING CHANGE: Preprocessors have been refactored and renamed to Converter/ScalarConverter
- Moved CI builds from Travis to GitHub actions
- Nothing.
- GCC warnings from
-Wsign-compare
and-Wsequence-point
.
- Initial version.
- Nothing.
- Nothing.
- Nothing.