-
Original standard container code comes from SGI
STL library, which enhanced the original HP STL code. Code was
rewritten for Boost.Interprocess and
moved to Boost.Intrusive. Many thanks
to Alexander Stepanov, Meng Lee, David Musser, Matt Austern... and all
HP and SGI STL developers.
-
flat_[multi]_map/set containers were originally based
on Loki's
AssocVector class. Code was rewritten and expanded for Boost.Interprocess,
so thanks to Andrei Alexandrescu.
-
stable_vector was invented
and coded by Joaquín
M. López Muñoz, then adapted for Boost.Interprocess.
Thanks for such a great container.
-
static_vector was based
on Andrew Hundt's and Adam Wulkiewicz's high-performance varray class. Many performance improvements
of vector were also inspired
by their implementation. Thanks!
-
devector's initial implementation
is based on Thaler Benedek's high-performance devector
implementation, then adapted for Boost.Container.
Also inspired by similar implemenations by Orson Peters and Lars Hagen.
Thanks for such a great code and documentation!
-
Howard Hinnant's help and advices were essential when implementing move
semantics, improving allocator support or implementing small string optimization.
Thanks Howard for your wonderful standard library implementations.
-
And finally thanks to all Boosters who helped all these years, improving,
fixing and reviewing all my libraries.
-
Reimplemented
boost::container::deque.
The original implementation was based on the SGI's original data structure
(similar to libstdc++). Main changes:
-
sizeof(deque)
was 10 words, now is 4 words. Probably the lightest implementation
around.
-
sizeof(deque::iterator)
was 4 words, now is is 2 words (similar to libc++ and MSVC).)
-
Several internal algorithms were reimplemented to speed up the
segmented nature of deque.
-
Defaults were slightly changed, 64 bit platforms now use 1024
byte blocks by default instead of classic SGI 512 byte blocks.
-
The new implementation eases further deque-like variations and
optimizations in the future.
-
Fixed bugs/issues:
-
Removed Boost.StaticAssert dependency.
-
Fixed bugs/issues:
-
devector's
insertion logic has been reimplemented to move elements to the center
of the devector if an insertion at one end has no free capacity but
there is free capacity on the other end. Current implementation keeps
reallocating memory when only inserting at one end and poping from
the other, provoking very high memory usage. The new strategy is based
on the article Double-ended
vector - is it useful? by Lars Greger Nordland Hagen.
-
The library now compiles without warnings with GCC's -Wcast-align=strict
-
Fixed bugs/issues:
-
Added [[no-discard]] attribute in all containers to catch bugs related
to unused return values.
-
Replaced default standard exception classes with Boost.Container own
classes, reducing considerably the included files overhead. Example:
in MSVC 19
boost/container/vector.hpp preprocessed file size reduces
from 1,5MB to 930KB. If you still want to use standard exception classes,
you can define BOOST_CONTAINER_USE_STD_EXCEPTIONS
before using any Boost.Container class.
-
Fixed bugs/issues:
-
New
devector
container.
-
Fixed bugs/issues:
-
Removed support for already deprecated GCC < 4.3 and MSVC < 9.0
(Visual 2008) compilers.
-
Default allocator parameter changed form
new_allocator<T> to void
to reduce symbol lenghts.
-
Fixed bugs:
-
vector can now have options, using
vector_options.
The growth factor and the stored size type can be specified.
-
Improved range insertion in flat_[multi]map/set
containers overall complexity is reduced to O(NlogN).
-
Fixed bugs:
-
flat_[multi]map/set can now work as container
adaptors, as proposed in P0429R1.
The allocator argument is checked for size() and
empty() members. If so, the argument is interpreted
as the required underlying container. This means that static_vector,
stable_vector and small_vector
can be used now with flat associative containers.
-
Fixed bugs:
-
Implemented
extract_sequence,
adopt_sequence functions
for flat_[multi]map/set associative containers.
-
Fixed bugs:
-
Implemented Polymorphic
Memory Resources.
-
Add more BOOST_ASSERT checks to test preconditions in some operations
(like
pop_back, pop_front, back,
front, etc.)
-
Added C++11
back/front operations to basic_string.
-
Fixed bugs:
-
Experimental
small_vector
container.
-
Massive dependency reorganization. Now Boost.Container
depends on very basic utilities like Boost.Core and Boost.Intrusive.
Preprocessed code size have decreased considerably and compilation
times have improved.
-
Added
nth and index_of functions to containers
with random-access iterators (except basic_string).
-
Added C++17's
allocator_traits<Allocator>::is_always_equal.
-
Updated containers to implement new constructors as specified in 2210.
Missing allocator-extended constructor for allocator-aware containers.
-
Fixed bugs:
-
Source Breaking:
scoped_allocator_adaptor's
propagate_on_container_copy_assignment,
propagate_on_container_move_assignment
and propagate_on_container_swap
are no longer ::boost::integral_constant<bool, true/false> types. The dependency reorganization
needed to break with those classes to avoid MPL dependencies, and interoperability
with std::integral_constant was not guaranteed.
Code assumming boost::true_type/boost::false_type
on this will not compile. As a workaround, use the guaranteed internal
::value
constant: ::boost::integral_constant<bool, scoped_allocator_adaptor<Allocator>::propagate_on_container_move_assignment::value>.
-
Added support for
initializer_list.
Contributed by Robert Matusewicz.
-
Fixed double destruction bugs in vector and backward expansion capable
allocators.
-
Fixed bugs:
-
Added experimental
static_vector
class, based on Andrew Hundt's and Adam Wulkiewicz's high performance
varray class.
-
Speed improvements in
vector
constructors/copy/move/swap, dispatching to memcpy when possible.
-
Support for
BOOST_NO_EXCEPTIONS
#7227.
-
Fixed bugs #7921,
#7969,
#8118,
#8294,
#8553,
#8724.
-
Fixed bug #7650.
-
Improved
vector's insertion
performance.
-
Changed again experimental multiallocation interface for better performance
(still experimental).
-
Added no exception support for those willing to disable exceptions
in their compilers.
-
Fixed GCC -Wshadow warnings.
-
Replaced deprecated BOOST_NO_XXXX with newer BOOST_NO_CXX11_XXX macros.
-
Improved
stable_vector's
template code bloat and type safety.
-
Changed typedefs and reordered functions of sequence containers to
improve doxygen documentation.
-
Fixed bugs #6615,
#7139,
#7215,
#7232,
#7269,
#7439.
-
Implemented LWG Issue #149 (range insertion now returns an iterator)
& cleaned up insertion code in most containers
-
Corrected aliasing errors.
-
First release. Container code from Boost.Interprocess
was deleted and redirected to Boost.Container
via using directives.