Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r49830 - in sandbox/itl: boost/itl libs/itl/doc libs/itl/example/boost_party
From: afojgo_at_[hidden]
Date: 2008-11-18 18:16:59


Author: jofaber
Date: 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
New Revision: 49830
URL: http://svn.boost.org/trac/boost/changeset/49830

Log:
Refactored: Introduced an access class to work with protected members of mixin classes.
Used solution of Alexander Nasonov (http://accu.org/index.php/journals/296).
Added itl.qbk and jamfile.v2. Began boost style documentation.
Stable {msvc-9.0}
Added:
   sandbox/itl/libs/itl/doc/
   sandbox/itl/libs/itl/doc/Jamfile.v2 (contents, props changed)
   sandbox/itl/libs/itl/doc/itl.qbk (contents, props changed)
Text files modified:
   sandbox/itl/boost/itl/interval_base_map.hpp | 100 ++++++++++++++++++++++++++++++++-------
   sandbox/itl/boost/itl/interval_base_set.hpp | 42 ++++++++++++++--
   sandbox/itl/boost/itl/interval_map.hpp | 33 ------------
   sandbox/itl/boost/itl/interval_set.hpp | 3
   sandbox/itl/boost/itl/separate_interval_set.hpp | 7 +-
   sandbox/itl/boost/itl/split_interval_map.hpp | 36 -------------
   sandbox/itl/boost/itl/split_interval_set.hpp | 3
   sandbox/itl/libs/itl/example/boost_party/boost_party.cpp | 4
   8 files changed, 129 insertions(+), 99 deletions(-)

Modified: sandbox/itl/boost/itl/interval_base_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_base_map.hpp (original)
+++ sandbox/itl/boost/itl/interval_base_map.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -223,6 +223,63 @@
                               Traits,Compare,Alloc> atomized_type;
 //@}
 
+private:
+ /** access is a technical class that makes protected members of derived classes
+ SubType accessible for direct call from the base class. Accessing via
+ fuction pointers has been proposed by Alexander Nasonov 2005:
+ http://accu.org/index.php/journals/296.
+ */
+ struct access : SubType
+ {
+ static bool contains(const SubType& subject, const typename SubType::value_type& operand)
+ {
+ bool (SubType::*fp)(const typename SubType::value_type&)const = &access::contains_;
+ return (subject.*fp)(operand);
+ }
+
+ template<class OperandT, class Combiner>
+ static void add(SubType& subject, const OperandT& operand, const Combiner& combine)
+ {
+ void (SubType::*fp)(const OperandT&, const Combiner&) = &access::add_;
+ (subject.*fp)(operand, combine);
+ }
+
+ template<class OperandT, class Combiner>
+ static void subtract(SubType& subject, const OperandT& operand, const Combiner& combine)
+ {
+ void (SubType::*fp)(const OperandT&, const Combiner&) = &access::subtract_;
+ (subject.*fp)(operand, combine);
+ }
+
+ template<class OperandT>
+ static void add(SubType& subject, const OperandT& operand)
+ {
+ void (SubType::*fp)(const OperandT&) = &access::add_;
+ (subject.*fp)(operand);
+ }
+
+ template<class OperandT>
+ static void subtract(SubType& subject, const OperandT& operand)
+ {
+ void (SubType::*fp)(const OperandT&) = &access::subtract_;
+ (subject.*fp)(operand);
+ }
+
+ template<class OperandT>
+ static void insert(SubType& subject, const OperandT& operand)
+ {
+ void (SubType::*fp)(const OperandT&) = &access::insert_;
+ (subject.*fp)(operand);
+ }
+
+ template<class OperandT>
+ static void erase(SubType& subject, const OperandT& operand)
+ {
+ void (SubType::*fp)(const OperandT&) = &access::erase_;
+ (subject.*fp)(operand);
+ }
+ };
+
 public:
     inline static bool has_symmetric_difference()
     { return is_set<codomain_type>::value || !traits::absorbs_neutrons || traits::emits_neutrons; }
@@ -270,11 +327,11 @@
     //--- contains: map view ------------------------------------------------------
     /// Does the map contain the element pair <tt>x = (key_element,value)</tt>?
     bool contains(const base_pair_type& x)const
- { return that()->contains_(value_type(interval_type(x.key), x.data)); }
+ { return access::contains(*that(), value_type(interval_type(x.key), x.data)); }
 
     /// Does the map contain all element value pairs represented by the interval-value pair sub?
     bool contains(const value_type& sub)const
- { return that()->contains_(sub); }
+ { return access::contains(*that(), sub); }
 
     /** Does <tt>*this</tt> container contain <tt>sub</tt>? */
     bool contains(const interval_base_map& sub)const
@@ -331,7 +388,7 @@
     template<class Combiner>
     SubType& add(const base_pair_type& x, const Combiner& combine)
     {
- that()->template add_(value_type(interval_type(x.KEY_VALUE), x.CONT_VALUE), combine);
+ access::add(*that(), value_type(interval_type(x.KEY_VALUE), x.CONT_VALUE), combine);
         return *that();
     }
 
@@ -351,17 +408,22 @@
         If Combinator implements addition (+=) associated values will contain sums.
         If Combinator implements max, associated values will contain maximal values and so on.
     */
+ //template<class Combiner>
+ //SubType& add(const value_type& x, const Combiner& combine)
+ //{ that()->add_(x, combine); return *that(); };
+
     template<class Combiner>
- SubType& add(const value_type& x, const Combiner& combine)
- { that()->add_(x, combine); return *that(); };
+ SubType& add(const value_type& x, const Combiner& combine)
+ { access::add(*that(), x, combine); return *that(); }
+
 
         template<class Combiner>
     SubType& add(const value_type& x)
- { that()->add_(x, mpl::apply<Combiner,CodomainT>::type()); return *that(); };
+ { access::add(*that(), x, mpl::apply<Combiner,CodomainT>::type()); return *that(); };
 
         template<template<class>class Combiner>
     SubType& add(const value_type& x)
- { that()->add_(x, Combiner<CodomainT>()); return *that(); };
+ { access::add(*that(), x, Combiner<CodomainT>()); return *that(); };
 
     /// Addition of a base value pair.
     /** Addition of a base value pair <tt>x := pair(k,y)</tt> where <tt>base_value_type:=pair<DomainT,CodomainT></tt>
@@ -393,7 +455,7 @@
         <tt>m0=m; m.add(x); m.subtract(x);</tt> implies <tt>m==m0 </tt>
     */
     SubType& add(const value_type& x)
- { that()->add_(x, inplace_plus<CodomainT>()); return *that(); }
+ { access::add(*that(), x, inplace_plus<CodomainT>()); return *that(); }
 //@}
 
 
@@ -449,7 +511,7 @@
     */
     SubType& subtract(const base_pair_type& x)
     {
- that()->subtract_( value_type(interval_type(x.key), x.data) );
+ access::subtract(*that(), value_type(interval_type(x.key), x.data) );
         return *that();
     }
 
@@ -470,9 +532,9 @@
     SubType& subtract(const value_type& x)
     {
         if(Traits::emits_neutrons)
- that()->add_(x, inplace_minus<CodomainT>());
+ access::add(*that(), x, inplace_minus<CodomainT>());
         else
- that()->subtract_(x, inplace_minus<CodomainT>());
+ access::subtract(*that(), x, inplace_minus<CodomainT>());
     
         return *that();
     }
@@ -493,7 +555,7 @@
     */
     SubType& insert(const base_pair_type& x)
     {
- that()->insert_( value_type(interval_type(x.key), x.data) );
+ access::insert(*that(), value_type(interval_type(x.key), x.data) );
         return *that();
     }
 
@@ -509,7 +571,7 @@
         \c insert(x) is equivalent to \c add<inplace_identity>(x)
     */
     SubType& insert(const value_type& x)
- { that()->insert_(x); return *that(); }
+ { access::insert(*that(), x); return *that(); }
 
     /// Erase a base value pair from the map
     /** Erase a base value pair <tt>x=(k,y)</tt>.
@@ -518,7 +580,7 @@
     */
     SubType& erase(const base_pair_type& x)
     {
- that()->erase_(value_type(interval_type(x.key), x.data));
+ access::erase(*that(), value_type(interval_type(x.key), x.data));
         return *that();
     }
 
@@ -532,7 +594,7 @@
         \c erase(x) is equivalent to \c subtract<inplace_erasure>(x)
     */
     SubType& erase(const value_type& x)
- { that()->erase_(x); return *that(); }
+ { access::erase(*that(), x); return *that(); }
 
 
     /// Erase an associated value for a key
@@ -908,7 +970,7 @@
 {
     // x2 should be larger than *this; so every element in this should be in x2
     const_FOR_IMPLMAP(it)
- if(!super.that()->contains_(*it))
+ if(!super.contains(*it))
             return false;
     return true;
 }
@@ -1153,8 +1215,8 @@
         victim = it; it++; _map.erase(victim);
     }
     
- that()->add_(value_type(leftResid, leftResid_ContVal));
- that()->add_(value_type(rightResid, rightResid_ContVal));
+ add(value_type(leftResid, leftResid_ContVal));
+ add(value_type(rightResid, rightResid_ContVal));
 
     return *that();
 }
@@ -1170,7 +1232,7 @@
     ::erase(const interval_base_map& erasure)
 {
     const_FORALL(typename interval_base_map, value_pair_, erasure)
- that()->erase_(*value_pair_);
+ access::erase(*that(), *value_pair_);
 
     return *that();
 }

Modified: sandbox/itl/boost/itl/interval_base_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_base_set.hpp (original)
+++ sandbox/itl/boost/itl/interval_base_set.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -173,7 +173,35 @@
     /// const_iterator for iteration over intervals
     typedef typename ImplSetT::const_reverse_iterator const_reverse_iterator;
 
+private:
+ /** access is a technical class that makes protected members of derived classes
+ SubType accessible for direct call from the base class. Accessing via
+ fuction pointers has been proposed by Alexander Nasonov 2005:
+ http://accu.org/index.php/journals/296.
+ */
+ struct access : SubType
+ {
+ static bool contains(const SubType& subject, const typename SubType::value_type& operand)
+ {
+ bool (SubType::*fp)(const typename SubType::value_type&)const = &access::contains_;
+ return (subject.*fp)(operand);
+ }
+
+ static void add(SubType& subject, const typename SubType::value_type& operand)
+ {
+ void (SubType::*fp)(const typename SubType::value_type&) = &access::add_;
+ (subject.*fp)(operand);
+ }
+
+ static void subtract(SubType& subject, const typename SubType::value_type& operand)
+ {
+ void (SubType::*fp)(const typename SubType::value_type&) = &access::subtract_;
+ (subject.*fp)(operand);
+ }
 
+ };
+
+public:
     // B: Constructors, destructors, assignment
     /// Default constructor for the empty set
     interval_base_set(){}
@@ -204,11 +232,11 @@
 
     /// Does the container contain the element \c x
     bool contains(const DomainT& x)const
- { return that()->contains_(interval_type(x)); }
+ { return access::contains(*that(), interval_type(x)); }
 
     /// Does the container contain the interval x
     bool contains(const interval_type& x)const
- { return that()->contains_(x); }
+ { return access::contains(*that(), x); }
 
     /** Does <tt>*this</tt> container contain <tt>sub</tt>? */
     bool contains(const interval_base_set& sub)const
@@ -251,11 +279,11 @@
 
     /// Add a single element \c x to the set
     SubType& add(const DomainT& x)
- { that()->add_(interval_type(x)); return *that(); }
+ { access::add(*that(), interval_type(x)); return *that(); }
 
     /// Add an interval of elements \c x to the set
     SubType& add(const value_type& x)
- { that()->add_(x); return *that(); }
+ { access::add(*that(), x); return *that(); }
 
 //@}
 
@@ -265,11 +293,11 @@
 
     /// Subtract a single element \c x from the set
     SubType& subtract(const DomainT& x)
- { that()->subtract_(interval_type(x)); return *that(); }
+ { access::subtract(*that(), interval_type(x)); return *that(); }
 
     /// Subtract an interval of elements \c x from the set
     SubType& subtract(const value_type& x)
- { that()->subtract_(x); return *that(); }
+ { access::subtract(*that(), x); return *that(); }
 
     ///// Subtract a single element \c x from the set
     //interval_base_set& operator -= (const DomainT& x)
@@ -502,7 +530,7 @@
     {
         // x2 should be larger than *this; so every element in this should be in x2
         const_FOR_IMPL(it)
- if(!x2.that()->contains_(*it))
+ if(!x2.contains(*it))
                 return false;
         return true;
     }

Modified: sandbox/itl/boost/itl/interval_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_map.hpp (original)
+++ sandbox/itl/boost/itl/interval_map.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -174,9 +174,9 @@
             this->add(*it);
     }
 
+protected:
     bool contains_(const value_type& x)const;
 
-
     template<class Combiner>
     void add_(const value_type&, const Combiner&);
 
@@ -197,9 +197,6 @@
     void insert_(const value_type& value);
     void erase_(const value_type& value);
 
- //TESTCODE
- void getResiduals(const interval_type& x_itv, interval_type& leftResid, interval_type& rightResid);
-
 private:
     bool insertable(const value_type& value)const
     {
@@ -256,34 +253,6 @@
 }
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class, template<class>class>class Interval, template<class>class Compare, template<class>class Alloc>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Alloc>::getResiduals(const interval_type& x_itv, interval_type& leftResid, interval_type& rightResid)
-{
- iterator fst_it = this->_map.lower_bound(x_itv);
- iterator end_it = this->_map.upper_bound(x_itv);
-
- if(fst_it==end_it)
- {
- leftResid.clear();
- rightResid.clear();
- return;
- }
-
- (*fst_it).KEY_VALUE.left_surplus(leftResid, x_itv);
- iterator lst_it = fst_it; lst_it++;
-
- if(lst_it==end_it)
- {
- rightResid.clear();
- return;
- }
-
- lst_it=end_it; lst_it--;
-
- (*lst_it).KEY_VALUE.right_surplus(rightResid, x_itv);
-}
-
-
 template <typename DomainT, typename CodomainT, class Traits,
           template<class, template<class>class>class Interval, template<class>class Compare, template<class>class Alloc>
 bool interval_map<DomainT,CodomainT,Traits,Interval,Compare,Alloc>

Modified: sandbox/itl/boost/itl/interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_set.hpp (original)
+++ sandbox/itl/boost/itl/interval_set.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -203,6 +203,7 @@
             this->add(*it);
     }
 
+protected:
     /// Does the set contain the interval <tt>x</tt>?
     bool contains_(const interval_type& x)const;
 
@@ -212,10 +213,10 @@
     /// Removal of an interval <tt>x</tt>
     void subtract_(const value_type& x);
 
+private:
     /// Treatment of adjoint intervals on insertion
     void handle_neighbours(const iterator& it);
 
-protected:
     iterator joint_insert(const iterator& left_it, const iterator& right_it);
 } ;
 

Modified: sandbox/itl/boost/itl/separate_interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/separate_interval_set.hpp (original)
+++ sandbox/itl/boost/itl/separate_interval_set.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -154,9 +154,6 @@
         (const interval_base_set<SubType,DomainT,Interval,Compare,Alloc>& src)
     { assign(src); return *this; }
 
- /// Does the set contain the interval <tt>x</tt>?
- bool contains_(const interval_type& x)const;
-
     /// Assignment from a base interval_set.
     template<class SubType>
     void assign(const interval_base_set<SubType,DomainT,Interval,Compare,Alloc>& src)
@@ -168,6 +165,9 @@
             this->_set.insert(*it);
     }
 
+protected:
+ /// Does the set contain the interval <tt>x</tt>?
+ bool contains_(const interval_type& x)const;
 
     /// Insertion of an interval <tt>x</tt>
     void add_(const value_type& x);
@@ -175,6 +175,7 @@
     /// Removal of an interval <tt>x</tt>
     void subtract_(const value_type& x);
 
+private:
     /// Treatment of adjoint intervals on insertion
     void handle_neighbours(const iterator& it){}
 } ;

Modified: sandbox/itl/boost/itl/split_interval_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/split_interval_map.hpp (original)
+++ sandbox/itl/boost/itl/split_interval_map.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -188,9 +188,9 @@
                 this->_map.insert(*it);
         }
 
+ protected:
         bool contains_(const value_type& x)const;
 
-
         template<class Combiner>
         void add_(const value_type&, const Combiner&);
 
@@ -211,13 +211,9 @@
         void insert_(const value_type& value);
         void erase_(const value_type& value);
 
+ private:
         void handle_neighbours(const iterator& it){}
         
- //TESTCODE
- void getResiduals(const interval_type& x_itv, interval_type& leftResid, interval_type& rightResid);
-
- private:
-
         void fill(const value_type&);
 
         template<class Combiner>
@@ -260,34 +256,6 @@
 
 
 
- template <typename DomainT, typename CodomainT, class Traits, template<class, template<class>class>class Interval, template<class>class Compare, template<class>class Alloc>
- void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Alloc>::getResiduals(const interval_type& x_itv, interval_type& leftResid, interval_type& rightResid)
- {
- iterator fst_it = this->_map.lower_bound(x_itv);
- iterator end_it = this->_map.upper_bound(x_itv);
-
- if(fst_it==end_it)
- {
- leftResid.clear();
- rightResid.clear();
- return;
- }
-
- (*fst_it).KEY_VALUE.left_surplus(leftResid, x_itv);
- iterator lst_it = fst_it; lst_it++;
-
- if(lst_it==end_it)
- {
- rightResid.clear();
- return;
- }
-
- lst_it=end_it; lst_it--;
-
- (*lst_it).KEY_VALUE.right_surplus(rightResid, x_itv);
- }
-
-
 template <typename DomainT, typename CodomainT, class Traits,
           template<class, template<class>class>class Interval, template<class>class Compare, template<class>class Alloc>
 void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Alloc>

Modified: sandbox/itl/boost/itl/split_interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/split_interval_set.hpp (original)
+++ sandbox/itl/boost/itl/split_interval_set.hpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -182,6 +182,7 @@
                 this->_set.insert(*it);
         }
         
+ protected:
         /// Does the set contain the interval <tt>x</tt>?
         bool contains_(const interval_type& x)const;
 
@@ -191,10 +192,10 @@
         /// Removal of an interval <tt>x</tt>
         void subtract_(const value_type& x);
 
+ private:
         /// Treatment of adjoint intervals on insertion
         void handle_neighbours(const iterator& it){}
 
- private:
         void insert_rest(const interval_type& x_itv, iterator& it, iterator& end_it);
         void subtract_rest(const interval_type& x_itv, iterator& it, iterator& end_it);
     } ;

Added: sandbox/itl/libs/itl/doc/Jamfile.v2
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/doc/Jamfile.v2 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -0,0 +1,55 @@
+# Boost.Itl
+#
+# Copyright (c) 2008-2008 Joachim Faulhaber
+# Copyright (c) 2000-2006 Cortex Software GmbH
+#
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import doxygen ;
+import quickbook ;
+
+# -----------------------------------------------------------------------------
+# Doxygen
+# -----------------------------------------------------------------------------
+
+doxygen itldoc
+ :
+ [ glob ../../../boost/itl/*.hpp ]
+ :
+ <doxygen:param>EXTRACT_ALL=YES
+ <doxygen:param>HIDE_UNDOC_MEMBERS=NO
+ <doxygen:param>EXTRACT_PRIVATE=NO
+ <doxygen:param>ENABLE_PREPROCESSING=YES
+ <doxygen:param>MACRO_EXPANSION=NO
+ <doxygen:param>EXPAND_ONLY_PREDEF=YES
+ <doxygen:param>SEARCH_INCLUDES=NO
+ <reftitle>"Interval Template Library DocTest"
+ ;
+
+
+# -----------------------------------------------------------------------------
+# Quickbook
+# -----------------------------------------------------------------------------
+
+import quickbook ;
+
+xml itl
+ :
+ itl.qbk
+ ;
+
+boostbook standalone
+ :
+ itl
+ :
+ <xsl:param>boost.root=../../../..
+ <xsl:param>boost.libraries=../../../libraries.htm
+ <xsl:param>toc.max.depth=2
+ <xsl:param>toc.section.depth=2
+ <xsl:param>chunk.section.depth=1
+ <dependency>itldoc
+
+ ;
+

Added: sandbox/itl/libs/itl/doc/itl.qbk
==============================================================================
--- (empty file)
+++ sandbox/itl/libs/itl/doc/itl.qbk 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -0,0 +1,99 @@
+[library Boost.Itl
+ [quickbook 1.4]
+ [authors [Faulhaber, Joachim]]
+ [copyright 2007-2008 Joachim Faulhaber]
+ [copyright 2000-2006 Cortex Software GmbH]
+ [category container]
+ [id optional]
+ [dirname optional]
+ [purpose
+ Implements sets and maps as sets and maps of intervals
+ ]
+ [source-mode c++]
+ [license
+Distributed under the Boost Software License, Version 1.0.
+(See accompanying file LICENSE_1_0.txt or copy at
+[@http://www.boost.org/LICENSE_1_0.txt])
+ ]
+]
+
+[/ Macros will be used for links so we have a central place to change them ]
+
+[/ Cited Boost resources ]
+
+[/ Other web resources ]
+
+[/ Icons ]
+
+[def __SPACE__ [$images/space.png]]
+[def __GO_TO__ [$images/callouts/R.png]]
+
+
+[section Introduction]
+
+The Interval Template Library (ITL) offers *intervals* and two kinds of
+interval containers: *interval_sets* and *interval_maps*.
+
+An [classref boost::itl::interval_base_set interval_set] implements a set as a set of intervals.[br]
+An [classref boost::itl::interval_base_map interval_map] implements a map as a map of interval value pairs.
+
+[classref boost::itl::interval_base_set Interval_sets] and
+[classref boost::itl::interval_base_map interval_maps] thus expose two different aspects in
+their interfaces: (1) The functionality of a set or a map, which is the more
+['abstract aspect]. And (2) the functionality of an interval container which
+is the more specific and ['implementation related aspect]. In practice both
+aspects are useful and are therefore supported.
+
+Working with interval_sets and interval_maps can be
+beneficial whenever in a given problem domain the elements of
+sets appear in contiguous chunks: intervals. This is obviously the
+case in many problem domains, namely in fields that deal with problems
+related to date and time.
+
+This is a first motivating example of a very small party, demonstrationg the
+['*aggregate on overlap*] principle ['*(aggrovering)*] on interval_maps:
+
+In the example Mary enters the party first. She attends during the
+time interval [20:00,22:00). Harry enters later he stays within [21:00,23:00).
+``
+typedef set<string> guests;
+interval_map<time, guests> party;
+party += make_pair(interval<time>::rightopen(20:00, 22:00), guests("Mary"));
+party += make_pair(interval<time>::rightopen(21:00, 23:00), guests("Harry"));
+// party now contains
+[20:00, 21:00)->{"Mary"}
+[21:00, 22:00)->{"Harry","Mary"} //guest sets aggregated on overlap
+[22:00, 23:00)->{"Harry"}
+``
+On overlap of intervals, the corresponding name sets ar accumulated. At
+the points of overlap the intervals are split. The accumulation of content on
+overlap of intervals is done via an operator += that has to be implemented
+for the content parameter of the interval_map.
+
+As can be seen from the example an interval_map has both
+a decompositional behavior (on the time dimension) as well as
+an accumulative one (on the associated values).
+
+[section Interval Container's Conduct]
+
+[table Synopsis over the behavior of interval containers
+ [[joining] [joining] [separating] [splitting]]
+ [[set] [R0-C2] [R0-C3] [R0-C4]]
+ [[map] [R1-C2] [R1-C3] [R1-C4]]
+]
+
+
+[endsect]
+
+[endsect]
+
+[/aggregate on overlap aggrovering]
+[/aggregate on collide aggrolliding]
+
+[include examples.qbk]
+[include dependencies.qbk]
+[include acknowledgments.qbk]
+[xinclude itldoc.xml]
+
+
+14:46 18.11.2008
\ No newline at end of file

Modified: sandbox/itl/libs/itl/example/boost_party/boost_party.cpp
==============================================================================
--- sandbox/itl/libs/itl/example/boost_party/boost_party.cpp (original)
+++ sandbox/itl/libs/itl/example/boost_party/boost_party.cpp 2008-11-18 18:16:58 EST (Tue, 18 Nov 2008)
@@ -139,7 +139,7 @@
 
 
     BoostPartyAttendenceHistoryT::iterator it = party.begin();
- cout << "----- Histrory of party guests ------------------------\n";
+ cout << "----- History of party guests -------------------------\n";
     while(it != party.end())
     {
         interval<ptime> when = (*it).first;
@@ -150,7 +150,7 @@
     }
 
     BoostPartyHeightHistoryT::iterator height_ = tallest_guest.begin();
- cout << "----- Histrory of maximum guest height ----------------\n";
+ cout << "----- History of maximum guest height -----------------\n";
     while(height_ != tallest_guest.end())
     {
         interval<ptime> when = height_->first;


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk