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. mdds 0.10.3 * multi_type_vector * added 2 variants of release_range() that take start and end positions, to allow releasing of elements in specified interval. One of the variants takes iterator as a block position hint. * iterator release_range(size_type start_pos, size_type end_pos) * iterator release_range(const iterator& pos_hint, size_type start_pos, size_type end_pos) * added push_back() and push_back_empty(), to allow efficient way to append new values to the end of the container. * template<typename _T> iterator push_back(const _T& value) * iterator push_back_empty() mdds 0.10.2 * multi_type_vector * fixed a bug in transfer() that would trigger an assertion and eventually lead to a crash. The problem occurred when a range of data to be transferred spanned over 2 blocks and consisted of the lower part of an upper block and the upper part of a lower block. mdds 0.10.1 * 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. mdds 0.9.0 * 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 * fixed a memory leak in * set(size_type pos, const _T& it_begin, const _T& it_end). * 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. * 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. mdds 0.8.1 * multi_type_vector * fixed a bug in the erase() method where adjacent blocks of the same type would fail to merge after the erase() call. * 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. mdds 0.8.0 * all * added .pc file for pkg-config. * 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. * multi_type_vector * 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. mdds 0.7.1 * multi_type_vector * fixed a bug in set_empty() where emptying a whole or partial block would fail to merge its adjacent block(s) even when they are also empty. mdds 0.7.0 * multi_type_vector * 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. * fixed bugs in set() method (single-parameter variant) which would insert a new block at incorrect position. * fixed bugs in set() method (multi-parameter variant) which would fail to merge neighboring blocks of identical type under certain conditions. mdds 0.6.1 * all * use property files in the Visual Studio project files, to share some of the common custom build variables across all projects. * various build fixes and compiler warning eliminations. * fixed link error with boost 1.50. * fixed make installer script which previously would not install mdds/compat headers. * flat_segment_tree * fixed a bug in its iterator implementation, which previously would always treat the last valid position before the end position as the end position. This fix affects both in const_iterator and const_reverse_iterator. 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.4 * segment_tree * fixed build breakage, to allow it to be buildable when UNIT_TEST is not defined. * fixed a crasher with MSVC when comparing iterators of empty search_result instances. * point_quad_tree * fixed a bug where de-referencing copied search_result iterators would return an uninitialized node data. 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. mdds 0.5.2 * flat_segment_tree * fixed a crash on assignment by properly implementing assignment operator(). * fixed several bugs in shift_right(): * shifting of all existing nodes was not handled properly. * leaf nodes were not properly linked under certain conditions. * shifting with skip node option was not properly skipping the node at insertion position when the insertion position was at the leftmost node. * implemented min_key(), max_key(), default_value(), clear() and swap(). * fixed a bug in operator==() where two different containers were incorrectly evaluated to be equal. * added quickcheck test code. mdds 0.5.1 * fixed build issues on Windows, using MSVC compilers. mdds 0.5.0 * flat_segment_tree's search methods now return a std::pair of const_iterator and bool, instead of just returning bool. * fixed a weird enum value mis-handling with mixed_type_matrix when compiled with MSVC++. * added new insert() method to flat_segment_tree that takes a positional hint in order to speed up insertion speed. Also, all three insert() methods now return the start position of the segment that an inserted segment belongs to. * slight performance improvement on the insert methods of flat_segment_tree. * slight performance improvement on the iterators of flat_segment_tree. * re-organized the structure of flat_segment_tree to split it into multiple headers. * properly support prefix, docdir, includedir configure options. * support DESTDIR environment variable for make install. mdds 0.4.0 * implemented mixed_type_matrix. mdds 0.3.1 * added support for boost::unordered_map (boost) and std::hash_map (stlport) in addition to C++0x's std::unordered_map. mdds 0.3.0 * implemented point_quad_tree. mdds 0.2.1 * added example files on how to use these data structures. * fixed a bug in segment_tree::search_result object, to make it work with empty result set. * fixed segment_tree to make it really usable outside of unit test code. mdds 0.2.0 * other general performance improvements. * lots of code cleanups. * support for search result iterator in segment_tree and rectangle_set, for better search performance. * implemented rectnagle_set. * fixed lots of bugs in the segment_tree implementation. mdds 0.1.2 * implemented segment_tree. * node_base class is now without virtual methods to avoid vtable generation.