v1.1.10
25 May 2008
bugfix: do_insert incorrectly incremented end() iterator when container was empty (which would mean a crash with non-circular std::list implementations)
refactor: removed end()/begin() wrapping in increment_segment and decrement_segmented. added assertions to check for end().
v1.1.8
11 April 2008
bugfix: do_insert incorrectly decremented end() iterator when container was empty (which would mean a crash with non-circular std::list implementations)
v1.1.7
29 January 2008
iterator comparison operators are now templated so const and non-const iterators can be compared
v1.1.6
22 January 2008
bugfix: difference_type iterator::operator-(iterator) was member function was not const
v1.1.5
20 January 2008
bugfix: iterator_base::add used non-const iterator variable for const iterator type meaning adding to const_iterator would not compile
v1.1.4
7 December 2007
bugfix: iterator_base::operator!=() functioned incorrectly, iterator_base::operator==() and iterator_base::operator-=() now simply use integer position for comparison
bugfix: erase(iterator, iterator) used end() iterator after it became invalid
v1.1.1
20 November 2007
added segmented_array(size_type, parameter_type) constructor
v1.1
18 November 2007
multiple changes, now compiles under g++
now resides under the default namespace "lib"
v1.0.25
17 November 2007
replaced #include <assert.h> with #include <cassert>
added #include <cstddef>
replaced size_t with std::size_t
added references to standard name typedefs in iterator_base
moved iter() method from derived iterator classes to iterator_base
bugfix: iterator_base template copy constructor did not use unique template parameter names (causes compiliation failure)
added standard name typedefs for iterator_base's template parameter types
bugfix: added non-template version of iterator_base copy constructor
v1.0.22
14 November 2007
after some thought re-added push_front() and pop_front() as they are in fact O(1) complexity (in terms of n container elements)
bugfix: integer position was not updated correctly by rewritten iterator_base::add()
optimization: iterator_base::add() rewritten so now "begin() + n" is as fast as locate(n)
optimization (minor): iterator_base::add() now only calculates "seg.end() - iSegmentCurrent" once instead of twice per iteration
v1.0.18
13 November 2007
added template swap() method
(cosmetic) changed "InputIterator" to "Integer" in dispatch_insert(..., std::tr1::true_type)
(cosmetic) changed occurrences of "traited" to "dispatch"
re-added template copy constructor and template assignment operator
made assignment operator and copy constructor non-templated
do_insert() no longer uses now removed vecarray::insert(iterator, const_iterator, size_type) method
copy constructor now takes templated source
bugfix: assignment operator now has scope unique template parameter names (compilation could have failed)
added #includes (<type_traits> and <stdexcept>)
minor optimization: now uses segment::parameter_type
added assignment operator
added assign() methods
added insert(iterator, size_type, parameter_type) method
removed superfluous insert(iterator, const T*, size_type) method
insert(iterator, InputIterator, InputIterator) method now behaves differently depending on is_integral(InputIterator) trait
v1.0.10
12 November 2007
optimization: replaced several calls to postfix increment/decrement operators with calls to prefix increment/decrement operators
bugfix: at() methods didn't compile because checked_iterator and checked_const_iterator referred to the now removed iIndex iterator member
bugfix: at() method didn't compile because checked_const_iterator constructor called incorrect base class constructor (iterator instead of const_iterator)
at(n) methods now throw a std::out_of_range exception if n >= size()
bugfix: const_iterator locate(size_type) didn't pass position to iterator return value constructor (compilation would fail if used)
v1.0.7
11 November 2007
removed push_front() and pop_front() methods as they are not O(1) complexity
optimization: push_back() now calls vecarray::push_back() instead of vecarray::insert() for the most common case resulting in a significant performance gain for push_back() method
added front() and back() element accessor methods
v1.0.5
10 November 2007
optimization: insert(position, const T&) no longer uses locate to obtain iterator return value
v1.0.4
9 November 2007
added segmented_array(InputIterator first, InputIterator last) constructor
added insert(iterator position, InputIterator first, InputIterator last) method
renamed two (now private) insert(...) methods to do_insert(...)
removed superfluous do_insert() method
v1.0.2
8 November 2007
bugfix: erase(iterator) returned invalid iterator (position incorrect)
bugfix: remove() used invalid iterator (causes crash), now uses iterator returned from erase()
changed push_back() return type to void and removed default argument
added allocator_type typedef
pointer, reference, const_pointer, const_reference now typedef'd from allocator
added support for correct iterator::pointer and iterator::reference types to iterator_base
v1.0.1
7 November 2007
bugfix: iterator_base::subtract() now calls decrement_segement() when iterating past beginning of segment
bugfix: iterator_base::subtract() now decrements position when calling decrement_segement()
iterator_nase::add()/subtract() now do nothing if n <= 0
bugfix: iterator_base::increment_segment()/decrement_segment() no longer reset position to 0
bugfix: position is now always updated by iterator_base::increment()/decrement()
bugfix: iterator_base::seg() now returns const segment& if iterator is a const_iterator
copy constructor now copies elements rather than segments saving memory
added insert(iterator, const_iterator, const_iterator) method
added swap(segmented_array&) method
iterator_base, checked_iterator and checked_const_iterator are now private classes
added default segment size (64)
added #includes (<list>, "vecarray.h")
renamed header file from segment.h to segmented_array.h