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.

mdds 0.12.0

* segment_tree

  * remove pointer requirement from value_type to allow non-pointer
    type to be stored.

* multi_type_vector

  * fixed a bug in the equality operator method.

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.
