Changelog:
* packed_trie_map (new)
* new data structure that implements a trie also known as a prefix
tree. This implementation requires all key values be known at
construction time, after which its content is considered
immutable. Internally it packs all its nodes in a single
contiguous array for space and lookup efficiencies.
* trie_map (new)
* new data structure that implements a trie. It works similar to
packed_trie_map except that this version is mutable.
* multi_type_matrix
* added a variant of walk() that takes the upper-left and
lower-right corners to allow walking through a subset of the
original matrix.
* multi_type_vector
* fixed incorrect return values of the increment and decrement
operators of in-block iterators. They would previously return a
value_type pointer which did not conform to the behaviors of STL
iterators.
* added support for custom event handlers for element block
acquisitions and releases.
* flat_segment_tree
* fixed incorrect return values of the increment and decrement
operators of its leaf-node iterators as in multi_type_vector's
fix.
* sorted_string_map
* significantly improved the performance of its find() method by
switching from using linear search to using binary search. The
improvement is especially visible with a large number of elements.
mdds 1.0.0
* all
* introduced API versioning to ease parallel installation of API
incompatible versions. Version 1.0.0 will have an API versoin of
1.0.
* C++11 is now a hard requirement.
* added API documentation via Doxygen, Sphinx and Breathe.
* mixed_type_matrix
* officially removed for good in favor of multi_type_matrix.
* multi_type_vector
* added memory usage reduction by conditionally shrinking the
capacity of the underlying vector containers.
* added slight performance gain by revising block adjustment policy
during splitting of blocks.
* sorted_string_map
* fixed a bug where a non-matching key was incorrectly returned as a
matching key.
* Apply patches from LibreOffice 5.0.0.5.
Changelog:
mdds 0.12.1
* flat_segment_tree
* removed construction-from-int requirement from value_type to allow
non-numeric types to be stored.
* removed construction-from-int requirement from key_type as well.
* Fix newer boost build.
Changelog:
mdds 0.11.2
* multi_type_vector
* fixed various memory leaks associated with the set() method when a
value overwrites an existing element in a managed block.
mdds 0.11.1
* all
* fixed a large number of outstanding defects reported by Coverity
Scan.
* multi_type_vector
* fixed 2 cases of double-free bug in the variant of swap() that
allows segmented swapping.
mdds 0.11.0
* sorted_string_map (new)
* new data structure to support efficient mapping of textural keys
to numeric values when the key values are known at compile time.
* multi_type_vector
* fixed a bug in transfer() where two adjacent blocks of identical
type would fail to be merged in some circumstances.
* added shrink_to_fit() to allow trimming of any excess capacity
from all non-empty blocks.
* fixed a double-free bug in the variant of swap() that allows
segmented swapping.
* improved the exception message when the block position lookup
fails to find valid block position, to make it easier to debug.
* Install more header files.
* Tweak Makefile
Changelog:
* multi_type_matrix
* added a variant of set_empty() that takes an additional length
parameter.
* void set_empty(size_type row, size_type col, size_type length)
mdds 0.10.0
* flat_segment_tree
* significant performance improvement on build_tree() and
search_tree(), by optimizing the non-leaf node object generation
and storage to achieve better locality of reference.
* segment_tree
* slight performance improvement on build_tree(), as a result of the
optimization done for flat_segment_tree since these two structures
share the same tree generation code.
* multi_type_vector
* improved debug message on mis-matched block types (only when
MDDS_MULTI_TYPE_VECTOR_DEBUG is defined).
mdds 0.9.1
* multi_type_vector
* added several convenience methods for position objects.
* performance improvement on setting array values.
* added new constructor that takes an array of values as initial
element values.
* multi_type_matrix
* setter methods that take a position object to also return a
position object.
* added several convenience methods for position objects.
* added new constructor that takes an array of values as initial
element values.
include:
* all
* added .pc file for pkg-config.
* multi_type_vector
* added another block function template to make it easier to declare
container with 3 custom element types.
* added two variants of release():
* template<typename _T> iterator
release(size_type pos, _T& value)
* template<typename _T> iterator
release(const iterator& pos_hint, size_type pos, _T& value)
* added a variant of release() that takes no arguments. This one
releases all elements and makes the container empty afterward.
* added a new variant of position() that takes const_iterator as
position hint.
* std::pair<const_iterator, size_type>
position(const const_iterator& pos_hint, size_type pos) const
* added compile-time macro MDDS_MULTI_TYPE_VECTOR_USE_DEQUE to allow
users to specify std::deque as the underlying data array. By
default, multi_type_vector uses std::vector as the underlying data
array container.
* added a new variant of swap() that allows partial swapping of
content with another container.
* added static block type identifier so that the numeric block type
ID can be deduced from the block type directly.
* value_type (which is a type of object returned when dereferencing
an iterator) now stores 'position' which is the logical position
of the first element of a block.
* added position_type and const_position_type which are typedefs to
the return types of position() methods.
* added char and unsigned char types to the standard types supported
by default.
* added position() member method that takes a logical element
position and returns a pair of block iterator where the element
resides and its offset within that block.
* added at() static member method to the data block, which calls the
at() method of the underlying std::vector container.
* added release() member method to allow caller to release an object
stored inside a managed block.
* added two templates to ease creation of custom element block
functions when using one or two custom element types.
* added transfer() member method to allow elements in a specified
range to be transferred from one container to another. When
transferring elements stored in a managed element block, the
ownership of those elements is also transferred.
* add variants of set() methods (both single- and multi-value)
insert(), set_empty() and insert_empty() methods that take an
iterator as an additional position hint parameter for block lookup
speed optimization.
* add support for non-const iterators which allow the client code to
modify values directly from the iterators.
* set() methods (both single- and multi-parameter variants),
set_empty(), insert() and insert_empty() methods now return
iterator that references the block to which the values are set or
inserted.
* multi_type_matrix:
* get_numeric(), get_boolean(), and get_string() are made more
efficient.
* added position() method that returns a reference object to an
element (position object).
* added variants of get_numeric(), get_boolean() and get_string()
that retrieves elements from position objects.
* added variants of set() that sets new element values via position
objects.
* add a variant of the position() method that takes an iterator as
positional hint. Note that there is no variant of position() that
takes const_iterator.
* flat_segment_tree
* changed the return type of search_tree from bool to
std::pair<const_iterator,bool>, to make it consistent with the
search() method. Note that this is an API-incompatible change.
mdds 0.6.0
* all
* added MSVS Solution file, to make it easier to build unit test
programs on Windows.
* mixed_type_matrix
* improved performance of size() method by caching it.
* multi_type_vector (new)
* new data structure to support efficient storage of data of different
types.
* multi_type_matrix (new)
* new data structure to eventually replace mixed_type_matrix. It uses
multi_type_vector as its backend storage.
mdds 0.5.3
* mixed_type_matrix
* re-implemented the filled storage for better performance, with two
separate implementations for zero and emtpy matrix types. The
newer implementation should improve object creation time
considerably.
Multi-Dimensional Data Structure (mdds)
A collection of multi-dimensional data structure and indexing algorithm.
It implements the following data structure:
* flat segment tree
* segment tree
* rectangle set