Author: Joachim Faulhaber
Copyright (c) 2007-2011: Joachim Faulhaber
Copyright (c) 1999-2006: Cortex Software GmbH, Berlin
Distributed under the Boost Software License, Version 1.0.
(See accompanying file LICENSE.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
The Interval Container Library (ICL+) formerly known as Interval Template Library (ITL) is a collection of generic c++ class templates for computations on intervals, interval containers, large bitsets and generalized crosstables or cubes.
The complete library constists of three parts.
Core library (Boost.Icl): Interval containers.
The core library is accepted into the Boost c++ Libraries Collection as Interval Container Library Boost.Icl. A detailed boost book documentation for Boost.Icl is online available here. We recommend to refer to this documentation for all informations related to interval containers. The boost book documentation also ships with this release and can be found at "<boost_root>/libs/icl/doc/html/index.html".
Extended library (icl_xt):
The extended part contains class templates interval_bitset, product_history, and tupel_computer (cubes). Those parts are not or not yet intended to be proposed for boost.
A Law Based Test Automaton (validate):
The Law Based Test Automaton (also refered to as LaBatea) is a tool for an automated teststing of code on the basis of laws or axioms. LaBatea has been used to validate the core library (icl) for a number of laws.
This doxygen generated documentation is provided for the additional library parts icl_xt and validate that are not yet covered by a proper boost book documentation.
You can download
The core library ICL from the boost vault.
Improvements for Boost 1.46.0 (ICL+ version 4.0.1)
The Interval Container Library, Boost.Icl will ship with the next Boost release 1.46.0 around February-1-2011. This version of the full library, ICL+ 4.0.1, contains the newest core library and implements improvements for class interval_bitset, Boost.DateTime interoperability and improved portability for a wide range of compilers.
Changes after the review (version 4.0.0)
A number of changes have been done after the review as a result of the reviews and the related discussion.
New library name
The library's name has been changed form Interval Template Library to Interval Container Library.
The library is now customizable for user defined interval types. A user defined type can be registered and adapted by partially instantiating a small interval_traits class.
Intervals with static bounds
Intervals with static or fixed bounds can now be used with the library. Statically bounded intervals use less memory and perform 25% faster on average than dynamically bounded intervals.
Extraction of algorithms to concepts.
Most of the class templates member functions have been extracted to sets of namespace global functions that represent concepts. Some functions have been renamed to conform existing standards.
The lastest addition of a container class template to the library is interval_bitsets. Interval_bitsets use interval compression and bitset compression to achieve a very efficient and compact representation of large bitsets. The idea and implementation of interval_bitsets is explained in the project section of the boost book documentation.
icl::add_iterator, and icl::insert_iterator
The implementation of all interval containers including interval_bitsets now provides iteration on the level of elements. This makes interval containers a model of SortedAssociativeContainers.
We provide a collection of examples that demonstrate the purpose and basic characteristics of the class templates offered by the library. To get an instant impression you may browse these examples first.
A minimal implementation of interval_bitset together with sample applications is included in the boost book documentation in the project section. The full implementation of interval_bitset is not yet part of the core library (icl). It's in the extended part (icl_xt) but it's integration into the core is intended.
History is a more sophisticated application of an interval_map to decompose data in time. Sample history.cpp shows how we can monitor a set of attributes in a history.
Cubes or tuple computers allow to perform computations on values associated to tuples. A ICL tuple computer works similar to pivot tables (in spreadsheet programs) olap cubes (online analytic processing) or crosstables (in statistical programs). Sample amount_cube.cpp presents an application where values are 'amounts', which is the simplest instance.
De Morgan's law on interval sets
This example de_morgan.cpp shows how to test a single law on given type. It shows how LaBatea reports successful validation and what happens, if law validations are found. The law can be modified to a valid form in this example by choosing a different equality relation for one of the law's templates parameters.