$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r50342 - in sandbox/itl: boost/itl libs/itl/example/boost_party libs/itl/test
From: afojgo_at_[hidden]
Date: 2008-12-21 06:38:13
Author: jofaber
Date: 2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
New Revision: 50342
URL: http://svn.boost.org/trac/boost/changeset/50342
Log:
Refactored: For Maps: Added template parameter ITL_SECTION Section. Moved template parameter Interval before Alloc. 
Stable {msvc-9.0, partly congcc-4.3-a7}
Text files modified: 
   sandbox/itl/boost/itl/interval_base_map.hpp              |   165 ++++++------                            
   sandbox/itl/boost/itl/interval_map.hpp                   |   119 ++++----                                
   sandbox/itl/boost/itl/interval_maps.hpp                  |   519 ++++++++++++++++++++------------------- 
   sandbox/itl/boost/itl/map.hpp                            |    91 +++---                                  
   sandbox/itl/boost/itl/notate.hpp                         |    13 +                                       
   sandbox/itl/boost/itl/rational.hpp                       |     4                                         
   sandbox/itl/boost/itl/split_interval_map.hpp             |    85 +++---                                  
   sandbox/itl/libs/itl/example/boost_party/boost_party.cpp |     2                                         
   sandbox/itl/libs/itl/test/test_interval_map_shared.hpp   |    33 +                                       
   9 files changed, 530 insertions(+), 501 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-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -140,10 +140,10 @@
     typename DomainT,
     typename CodomainT,
     class Traits = itl::neutron_absorber,
-    template<class,ITL_COMPARE>class Interval = itl::interval,
     ITL_COMPARE Compare  = ITL_COMPARE_INSTANCE(std::less, DomainT),
         ITL_COMBINE Combine  = ITL_COMBINE_INSTANCE(itl::inplace_plus, CodomainT),
-	//ITL_SECTION Section= ITL_SECTION_INSTANCE(itl::inplace_et, CodomainT), 
+	ITL_SECTION Section  = ITL_SECTION_INSTANCE(itl::inplace_star, CodomainT), 
+    template<class,ITL_COMPARE>class Interval = itl::interval,
     ITL_ALLOC   Alloc    = std::allocator
 >
 #ifdef USE_CONCEPTS
@@ -160,11 +160,11 @@
     typedef SubType sub_type;
 
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc>
+                              Traits,Compare,Combine,Section,Interval,Alloc>
                               type;
 
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              itl::neutron_absorber,Interval,Compare,Combine,Alloc>
+                              itl::neutron_absorber,Compare,Combine,Section,Interval,Alloc>
                               neutron_absorber_type;
 
     /// Domain type (type of the keys) of the map
@@ -188,6 +188,9 @@
     typedef ITL_COMPARE_DOMAIN(Compare,DomainT) domain_compare;
     /// Combine functor for codomain values
     typedef ITL_COMBINE_CODOMAIN(Combine,CodomainT) codomain_combine;
+    /// Intersection functor for codomain values
+    typedef ITL_SECTION_CODOMAIN(Section,CodomainT) codomain_intersect;
+
     /// Comparison functor for intervals which are keys as well
     typedef exclusive_less<interval_type> interval_compare;
 
@@ -200,7 +203,7 @@
 
     /// Container type for the implementation 
     typedef itl::map<interval_type,codomain_type,Traits,
-                     ITL_EXCLUSIVE_LESS(interval_type),Combine,Alloc> ImplMapT;
+                     ITL_EXCLUSIVE_LESS(interval_type),Combine,Section,Alloc> ImplMapT;
 
     /// key type of the implementing container
     typedef typename ImplMapT::key_type   key_type;
@@ -224,7 +227,7 @@
 
     /// The atomized type is elementbased map that is equivalent to the interval map
     typedef typename itl::map<DomainT,CodomainT,
-                              Traits,Compare,Combine,Alloc> atomized_type;
+                              Traits,Compare,Combine,Section,Alloc> atomized_type;
 //@}
         
 public:
@@ -653,16 +656,16 @@
     <
         template
         <    
-            class DomT, class CodomT, 
-            class Trts, template<class DomT2,ITL_COMPARE>class Interv, 
-            ITL_COMPARE Comp, ITL_COMBINE Combi, ITL_ALLOC Allc
+            class DomT, class CodomT, class Trts, 
+            ITL_COMPARE Comp, ITL_COMBINE Combi, ITL_SECTION Sect,
+            template<class DomT2,ITL_COMPARE>class Interv, ITL_ALLOC Allc
         >
         class IntervalMap
     >
     void add_intersection
     (
         interval_base_map& intersection,
-        const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& sectant
+        const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& sectant
     )const;
 
 //@}
@@ -856,13 +859,13 @@
 template 
 <
     class SubType, class DomainT, class CodomainT, class Traits, 
-    template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, 
-    ITL_COMBINE Combine, ITL_ALLOC Alloc
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, 
+    template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
 typename interval_base_map<SubType,DomainT,CodomainT,Traits,
-                           Interval,Compare,Combine,Alloc>::size_type 
+                           Compare,Combine,Section,Interval,Alloc>::size_type 
 interval_base_map<SubType,DomainT,CodomainT,Traits,
-                  Interval,Compare,Combine,Alloc>::cardinality()const
+                  Compare,Combine,Section,Interval,Alloc>::cardinality()const
 {
     using namespace boost::mpl;
     return if_<
@@ -876,13 +879,13 @@
 template 
 <
     class SubType, class DomainT, class CodomainT, class Traits, 
-    template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, 
-    ITL_COMBINE Combine, ITL_ALLOC Alloc
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, 
+    template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
 typename interval_base_map<SubType,DomainT,CodomainT,Traits,
-                           Interval,Compare,Combine,Alloc>::difference_type 
+                           Compare,Combine,Section,Interval,Alloc>::difference_type 
 interval_base_map<SubType,DomainT,CodomainT,Traits,
-                  Interval,Compare,Combine,Alloc>::length()const
+                  Compare,Combine,Section,Interval,Alloc>::length()const
 {
     difference_type length = neutron<difference_type>::value();
     const_FOR_IMPLMAP(it)
@@ -896,9 +899,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-bool interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::contained_in(const interval_base_map& super)const
+bool interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::contained_in(const interval_base_map& super)const
 {
     // x2 should be larger than *this; so every element in this should be in x2
     const_FOR_IMPLMAP(it) 
@@ -911,29 +914,29 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, 
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, 
+    template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
     template
     <
         template
         <    
-            class DomT, class CodomT, 
-            class Trts, template<class DomT2,ITL_COMPARE>class Interv, 
-            ITL_COMPARE Comp, ITL_COMBINE Combi, ITL_ALLOC Allc
+            class DomT, class CodomT, class Trts, 
+            ITL_COMPARE Comp, ITL_COMBINE Combi, ITL_SECTION Sect,
+            template<class DomT2,ITL_COMPARE>class Interv, ITL_ALLOC Allc
         >
         class IntervalMap
     >
-void interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_intersection
 (
     interval_base_map& intersection,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& sectant
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& sectant
 )const
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> sectant_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> sectant_type;
     if(sectant.empty()) 
         return;
     typename sectant_type::const_iterator common_lwb;
@@ -948,11 +951,11 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-void interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_intersection(interval_base_map& section, 
-                    const typename interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+                    const typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
                     ::value_type& sectant)const
 {
     interval_type sectant_interval = sectant.KEY_VALUE;
@@ -981,11 +984,11 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-void interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_intersection(interval_base_map& section, 
-                    const typename interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+                    const typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
                     ::interval_type& sectant_interval)const
 {
     if(sectant_interval.empty()) return;
@@ -1008,9 +1011,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::join()
 {
     iterator it=_map.begin();
@@ -1057,9 +1060,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-std::string interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::as_string()const
+std::string interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::as_string()const
 {
     std::string res(""); 
     const_FOR_IMPLMAP(it) {
@@ -1077,9 +1080,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-CodomainT interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::sum()const
+CodomainT interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::sum()const
 {
     CodomainT sum = CodomainT();
     const_FOR_IMPLMAP(it) 
@@ -1091,9 +1094,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-void interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::uniformBounds( typename interval<DomainT>::bound_types bt)
+void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::uniformBounds( typename interval<DomainT>::bound_types bt)
 {
     // I can do this only, because I am shure that the contents and the
     // ordering < on interval is invariant wrt. this transformation on bounds
@@ -1103,9 +1106,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-void interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::closeLeftBounds()
+void interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::closeLeftBounds()
 {
     // I can do this only, because I am shure that the contents and the
     // ordering < on interval is invariant wrt. this transformation on bounds
@@ -1117,9 +1120,9 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-SubType& interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+SubType& interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::erase(const interval_type& x_itv)
 {
     if(x_itv.empty()) return *that();
@@ -1155,10 +1158,10 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
 SubType& 
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::erase(const interval_base_map& erasure)
 {
     const_FORALL(typename interval_base_map, value_pair_, erasure)
@@ -1179,10 +1182,10 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-inline bool operator == (const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& lhs,
-                         const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& rhs)
+inline bool operator == (const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& lhs,
+                         const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& rhs)
 {
     //MEMO PORT: This implemetation worked with stlport, sgi and gnu 
     // implementations of the stl. But using MSVC-implementation
@@ -1195,13 +1198,13 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-inline bool is_protonic_equal(const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& lhs,
-                              const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& rhs)
+inline bool is_protonic_equal(const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& lhs,
+                              const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& rhs)
 {
-    interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> lhs0 = lhs;
-    interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> rhs0 = rhs;
+    interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> lhs0 = lhs;
+    interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> rhs0 = rhs;
 
     lhs0.absorb_neutrons();
     rhs0.absorb_neutrons();
@@ -1216,10 +1219,10 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-inline bool operator < (const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& lhs,
-                        const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& rhs)
+inline bool operator < (const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& lhs,
+                        const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& rhs)
 {
     return std::lexicographical_compare(
         lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), 
@@ -1230,10 +1233,10 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-inline bool operator <= (const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& lhs,
-                        const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& rhs)
+inline bool operator <= (const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& lhs,
+                        const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& rhs)
 {
     return lhs < rhs || lhs == rhs;
 }
@@ -1244,22 +1247,22 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, 
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, 
+    template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
 interval_base_map<SubType,DomainT,CodomainT,
-                  Traits,Interval,Compare,Combine,Alloc>& 
+                  Traits,Compare,Combine,Section,Interval,Alloc>& 
 min_assign
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& operand
+                            Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc> map_type;
+                              Traits,Compare,Combine,Section,Interval,Alloc> map_type;
     const_FORALL(typename map_type, elem_, operand) 
         object.template add<inplace_min >(*elem_); 
 
@@ -1269,22 +1272,22 @@
 template 
 <
     class SubType,
-    class DomainT, class CodomainT, 
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class DomainT, class CodomainT, class Traits, 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, 
+    template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
 interval_base_map<SubType,DomainT,CodomainT,
-                  Traits,Interval,Compare,Combine,Alloc>& 
+                  Traits,Compare,Combine,Section,Interval,Alloc>& 
 max_assign
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& operand
+                            Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc>    map_type;
+                              Traits,Compare,Combine,Section,Interval,Alloc>    map_type;
     const_FORALL(typename map_type, elem_, operand) 
         object.template add<inplace_max>(*elem_); 
 
@@ -1295,15 +1298,15 @@
 
 template<class CharType, class CharTraits, 
     class SubType, class DomainT, class CodomainT, class Traits, 
-    template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, 
-    ITL_COMBINE Combine, ITL_ALLOC Alloc>
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, 
+    template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
 std::basic_ostream<CharType, CharTraits>& operator <<
   (std::basic_ostream<CharType, CharTraits>& stream, 
    const interval_base_map<SubType,DomainT,CodomainT,Traits,
-                           Interval,Compare,Combine,Alloc>& object)
+                           Compare,Combine,Section,Interval,Alloc>& object)
 {
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc> IntervalMapT;
+                              Traits,Compare,Combine,Section,Interval,Alloc> IntervalMapT;
     stream << "{";
     const_FORALL(typename IntervalMapT, it, object)
         stream << "(" << (*it).KEY_VALUE << "->" << (*it).CONT_VALUE << ")";
Modified: sandbox/itl/boost/itl/interval_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_map.hpp	(original)
+++ sandbox/itl/boost/itl/interval_map.hpp	2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -107,24 +107,25 @@
     typename DomainT,
     typename CodomainT,
     class Traits = itl::neutron_absorber,
-    template<class,ITL_COMPARE>class Interval = itl::interval,
     ITL_COMPARE Compare  = ITL_COMPARE_INSTANCE(std::less, DomainT),
     ITL_COMBINE Combine  = ITL_COMBINE_INSTANCE(itl::inplace_plus, CodomainT),
+	ITL_SECTION Section  = ITL_SECTION_INSTANCE(itl::inplace_star, CodomainT), 
+    template<class,ITL_COMPARE>class Interval = itl::interval,
     ITL_ALLOC   Alloc    = std::allocator
 >
 class interval_map:
 
-    public interval_base_map<interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>, 
-                             DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+    public interval_base_map<interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>, 
+                             DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 {
 public:
     typedef Traits traits;
-    typedef interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> type;
+    typedef interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> type;
     typedef type joint_type;
-    typedef interval_base_map <interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>, 
-                               DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> base_type;
+    typedef interval_base_map <interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>, 
+                               DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> base_type;
 
-    typedef interval_map<DomainT,CodomainT,itl::neutron_absorber,Interval,Compare,Combine,Alloc>
+    typedef interval_map<DomainT,CodomainT,itl::neutron_absorber,Compare,Combine,Section,Interval,Alloc>
             neutron_absorber_type;
 
     typedef Interval<DomainT,Compare> interval_type;
@@ -149,7 +150,7 @@
     template<class SubType>
     explicit interval_map
         (const interval_base_map<SubType,DomainT,CodomainT,
-                                 Traits,Interval,Compare,Combine,Alloc>& src)
+                                 Traits,Compare,Combine,Section,Interval,Alloc>& src)
     { assign(src); }
 
     explicit interval_map(mapping_pair_type& base_pair): base_type()
@@ -162,16 +163,16 @@
     template<class SubType>
     interval_map& operator =
         (const interval_base_map<SubType,DomainT,CodomainT,
-                                 Traits,Interval,Compare,Combine,Alloc>& src)
+                                 Traits,Compare,Combine,Section,Interval,Alloc>& src)
     { assign(src); return *this; }
 
     /// Assignment from a base interval_map.
     template<class SubType>
     void assign(const interval_base_map<SubType,DomainT,CodomainT,
-                                        Traits,Interval,Compare,Combine,Alloc>& src)
+                                        Traits,Compare,Combine,Section,Interval,Alloc>& src)
     {
         typedef interval_base_map<SubType,DomainT,CodomainT,
-                                  Traits,Interval,Compare,Combine,Alloc> base_map_type;
+                                  Traits,Compare,Combine,Section,Interval,Alloc> base_map_type;
         this->clear();
         // Can be implemented via _map.insert: Interval joining not necessary.
         const_FORALL(typename base_map_type, it, src) 
@@ -185,8 +186,8 @@
         // that()->funx_. So they must be either public or made accessible by a
         // friend declaration:
         friend class
-        interval_base_map <interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>, 
-                                        DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>;
+        interval_base_map <interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>, 
+                                        DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>;
 
     bool contains_(const value_type& x)const;
 
@@ -242,8 +243,8 @@
 } ;
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-bool interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+bool interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::contains_(const value_type& interv_value)const
 {
     interval_type interv = interv_value.KEY_VALUE;
@@ -257,8 +258,8 @@
 
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-bool interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+bool interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::joinable(const iterator& some, const iterator& next)const
 {
     // assert: next != end && some++ == next
@@ -267,9 +268,9 @@
 }
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-typename interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::iterator 
-    interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+typename interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator 
+    interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::joint_insert(iterator& left_it, const iterator& right_it)
 {
     // both left and right are in the set and they are neighbours
@@ -297,8 +298,8 @@
 
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-bool interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+bool interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::join_left(iterator& it)
 {
     if(it == this->_map.begin())
@@ -319,8 +320,8 @@
 }
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-bool interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+bool interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::join_right(iterator& it)
 {
     if(it == this->_map.end())
@@ -341,9 +342,9 @@
 
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-typename interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::iterator
-interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+typename interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator
+interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::fill_join_left(const value_type& value)
 {
     //collision free insert is asserted
@@ -360,9 +361,9 @@
 }
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-typename interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::iterator
-interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+typename interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator
+interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::fill_join_both(const value_type& value)
 {
     //collision free insert is asserted
@@ -380,10 +381,10 @@
 
 //-----------------------------------------------------------------------------
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-typename interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::iterator
-interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+typename interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator
+interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::fill_gap_join_left(const value_type& value)
 {
     //collision free insert is asserted
@@ -411,10 +412,10 @@
 }
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-typename interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::iterator
-interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+typename interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::iterator
+interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::fill_gap_join_both(const value_type& value)
 {
     //collision free insert is asserted
@@ -445,9 +446,9 @@
 //-----------------------------------------------------------------------------
 // add<Combinator>(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -547,9 +548,9 @@
     }
 }
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_rest(const interval_type& x_itv, const CodomainT& x_val, iterator& it, iterator& end_it)
 {
     iterator nxt_it = it; nxt_it++;
@@ -580,9 +581,9 @@
     add_rear<Combiner>(x_rest, x_val, it);
 }
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_rear(const interval_type& x_rest, const CodomainT& x_val, iterator& it)
 {
     interval_type cur_itv = (*it).KEY_VALUE ;
@@ -622,9 +623,9 @@
 //-----------------------------------------------------------------------------
 // subtract<Combinator>(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::subtract_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -691,9 +692,9 @@
 
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::subtract_rest(const interval_type& x_itv, const CodomainT& x_val, iterator& it, iterator& end_it)
 {
     iterator nxt_it=it; nxt_it++;
@@ -762,9 +763,9 @@
 //-----------------------------------------------------------------------------
 // insert(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, 
-          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits,
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::insert_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -827,9 +828,9 @@
 }
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, 
-          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits,
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::insert_rest(const interval_type& x_itv, const CodomainT& x_val, 
                   iterator& it, iterator& end_it)
 {
@@ -855,9 +856,9 @@
     insert_rear(x_rest, x_val, it);
 }
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, 
-          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits,
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::insert_rear(const interval_type& x_rest, const CodomainT& x_val, 
                   iterator& it)
 {
@@ -886,8 +887,8 @@
 //-----------------------------------------------------------------------------
 // erase(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::erase_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -945,8 +946,8 @@
 }
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::erase_rest(const interval_type& x_itv, const CodomainT& x_val, 
                  iterator& it, iterator& end_it)
 {
Modified: sandbox/itl/boost/itl/interval_maps.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_maps.hpp	(original)
+++ sandbox/itl/boost/itl/interval_maps.hpp	2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -16,8 +16,8 @@
 
 template
 <    
-    class, class, class, template<class,ITL_COMPARE>class, 
-    ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+    class, class, class, 
+    ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
 >
 class interval_map;
 
@@ -25,27 +25,53 @@
 //-----------------------------------------------------------------------------
 // addition +=
 //-----------------------------------------------------------------------------
+/*CL
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator +=
 (
-          interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+          interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
+)
+{
+    typedef IntervalMap<DomainT,CodomainT,
+                        Traits,Compare,Combine,Section,Interval,Alloc> operand_type;
+    const_FORALL(typename operand_type, elem_, operand) 
+        object.add(*elem_); 
+
+    return object; 
+}
+*/
+template 
+<
+	class ObjectT,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
+    template
+    <
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
+    >
+    class IntervalMap
+>
+ObjectT& operator +=
+(
+          ObjectT& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> operand_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> operand_type;
     const_FORALL(typename operand_type, elem_, operand) 
         object.add(*elem_); 
 
@@ -54,49 +80,47 @@
 
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
 operator +
 (
-    const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+    const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
-	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) += operand; 
 }
 //-----------------------------------------------------------------------------
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator +=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> operand_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> operand_type;
     const_FORALL(typename operand_type, elem_, operand) 
         object.add(*elem_); 
 
@@ -105,24 +129,24 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+ 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator +
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) += operand; 
 }
 //-----------------------------------------------------------------------------
@@ -130,22 +154,22 @@
 //--- value_type --------------------------------------------------------------
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+ 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator +=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const typename 
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::value_type& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::value_type& operand
 )
 {
     return object.add(operand); 
@@ -153,24 +177,24 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+ 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
 operator +
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::value_type& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::value_type& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) += operand; 
 }
 //-----------------------------------------------------------------------------
@@ -192,21 +216,21 @@
 */
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+ 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator +=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::mapping_pair_type& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::mapping_pair_type& operand
 )
 {
     return object.add(operand); 
@@ -214,24 +238,24 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+ 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator +
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::mapping_pair_type& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::mapping_pair_type& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) += operand; 
 }
 //-----------------------------------------------------------------------------
@@ -241,25 +265,25 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+ 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator -=
 (
-          interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+          interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> operand_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> operand_type;
     const_FORALL(typename operand_type, elem_, operand) 
         object.subtract(*elem_); 
 
@@ -268,49 +292,47 @@
 
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator -
 (
-    const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+    const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
-	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) += operand; 
 }
 //-----------------------------------------------------------------------------
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator -=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> operand_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> operand_type;
     const_FORALL(typename operand_type, elem_, operand) 
         object.subtract(*elem_); 
 
@@ -319,24 +341,23 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator -
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) -= operand; 
 }
 //-----------------------------------------------------------------------------
@@ -356,21 +377,20 @@
 */
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator -=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::value_type& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::value_type& operand
 )
 {
     return object.subtract(operand); 
@@ -378,24 +398,23 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator -
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::value_type& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::value_type& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) -= operand; 
 }
 //-----------------------------------------------------------------------------
@@ -404,21 +423,20 @@
 //--- mapping_type ---------------------------------------------------------
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator -=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::mapping_pair_type& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::mapping_pair_type& operand
 )
 {
     return object.subtract(operand); 
@@ -426,24 +444,23 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator -
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::mapping_pair_type& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::mapping_pair_type& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) -= operand; 
 }
 //-----------------------------------------------------------------------------
@@ -453,9 +470,8 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
         class, template<class,ITL_COMPARE>class, 
@@ -463,10 +479,10 @@
     >
     class IntervalSet
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator -=
 (
-          interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
+          interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const IntervalSet<DomainT,Interval,Compare,Alloc>& erasure
 )
 {
@@ -479,9 +495,8 @@
 
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
         class, template<class,ITL_COMPARE>class, 
@@ -489,14 +504,14 @@
     >
     class IntervalSet
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator -
 (
-    const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
+    const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const IntervalSet<DomainT,Interval,Compare,Alloc>& operand
 )
 {
-	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) -= operand; 
 }
 //-----------------------------------------------------------------------------
@@ -504,21 +519,20 @@
 //--- value_type --------------------------------------------------------------
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator -=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::interval_type& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::interval_type& operand
 )
 {
     return object.erase(operand); 
@@ -526,24 +540,23 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
 operator -
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::interval_type& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::interval_type& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) -= operand; 
 }
 //-----------------------------------------------------------------------------
@@ -554,16 +567,15 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     class OperandT
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 insert
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const OperandT& operand
 )
 {
@@ -577,16 +589,15 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     class OperandT
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 erase
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const OperandT& operand
 )
 {
@@ -600,21 +611,20 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     class SectanT
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator *=
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const SectanT& operand
 )
 {
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc> object_type;
+                              Traits,Compare,Combine,Section,Interval,Alloc> object_type;
     object_type intersection;
     object.add_intersection(intersection,operand);
     object.swap(intersection);
@@ -623,44 +633,42 @@
 
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     class SectanT
 >
-interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
 operator *
 (
-    const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
+    const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const SectanT& operand
 )
 {
-	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) *= operand; 
 }
 //-----------------------------------------------------------------------------
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
         template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
 operator *=
 (
-          IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> object_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> object_type;
     object_type intersection;
     object.add_intersection(intersection,operand);
     object.swap(intersection);
@@ -669,24 +677,23 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
         template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> 
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
 operator *
 (
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object,
-    const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& operand
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
-	typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> ObjectT;
+	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
         return ObjectT(object) *= operand; 
 }
 //-----------------------------------------------------------------------------
@@ -696,28 +703,27 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class LeftIntervalMap,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class RightIntervalMap
 >
 bool is_element_equal
 (
     const LeftIntervalMap <DomainT,CodomainT,
-                           Traits,Interval,Compare,Combine,Alloc>& left,
+                           Traits,Compare,Combine,Section,Interval,Alloc>& left,
     const RightIntervalMap<DomainT,CodomainT,
-                           Traits,Interval,Compare,Combine,Alloc>& right
+                           Traits,Compare,Combine,Section,Interval,Alloc>& right
 )
 {
     return Interval_Set::is_element_equal(left, right);
@@ -731,13 +737,12 @@
 //--- IntervalMap -------------------------------------------------------------
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class SubType, class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
@@ -745,15 +750,15 @@
 bool is_disjoint
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const IntervalMap<DomainT,CodomainT,
-                      Traits,Interval,Compare,Combine,Alloc>& operand
+                      Traits,Compare,Combine,Section,Interval,Alloc>& operand
 )
 {
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc> object_type;
+                              Traits,Compare,Combine,Section,Interval,Alloc> object_type;
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> operand_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> operand_type;
     object_type intersection;
 
     if(operand.empty())
@@ -780,8 +785,8 @@
 /*CL
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
+    class SubType, class DomainT, class CodomainT, class Traits,
+ 
     ITL_COMPARE Compare, ITL_ALLOC Alloc,
     template
     <    
@@ -794,12 +799,12 @@
 bool is_disjoint
 (
           interval_base_map<SubType,DomainT,CodomainT,
-                            Traits,Interval,Compare,Combine,Alloc>& object,
+                            Traits,Compare,Combine,Section,Interval,Alloc>& object,
     const IntervalSet<DomainT,Interval,Compare,Alloc>& operand
 )
 {
     typedef interval_base_map<SubType,DomainT,CodomainT,
-                              Traits,Interval,Compare,Combine,Alloc> object_type;
+                              Traits,Compare,Combine,Section,Interval,Alloc> object_type;
     typedef IntervalSet<DomainT,Interval,Compare,Alloc> operand_type;
     object_type intersection;
 
@@ -826,13 +831,12 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap,
     template
@@ -846,12 +850,12 @@
 bool is_disjoint
 (
     const IntervalMap<DomainT,CodomainT,
-                      Traits,Interval,Compare,Combine,Alloc>&  object,
+                      Traits,Compare,Combine,Section,Interval,Alloc>&  object,
     const IntervalSet<DomainT,Interval,Compare,Alloc>& operand
 )
 {
     typedef IntervalMap<DomainT,CodomainT,
-                        Traits,Interval,Compare,Combine,Alloc> object_type;
+                        Traits,Compare,Combine,Section,Interval,Alloc> object_type;
     typedef IntervalSet<DomainT,Interval,Compare,Alloc> operand_type;
     object_type intersection;
 
@@ -877,13 +881,12 @@
 
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap,
     template
@@ -898,7 +901,7 @@
 (
     const IntervalSet<DomainT,Interval,Compare,Alloc>& left,
     const IntervalMap<DomainT,CodomainT,
-                      Traits,Interval,Compare,Combine,Alloc>&  right
+                      Traits,Compare,Combine,Section,Interval,Alloc>&  right
 )
 {
         return is_disjoint(right, left);
@@ -909,20 +912,19 @@
 //-----------------------------------------------------------------------------
 template 
 <
-    class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc,
+    class DomainT, class CodomainT, class Traits,
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc,
     template
     <    
-        class, class, class, template<class,ITL_COMPARE>class, 
-        ITL_COMPARE, ITL_COMBINE, ITL_ALLOC
+        class, class, class, 
+        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
     >
     class IntervalMap
 >
-typename IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::interval_type 
-enclosure(const IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object)
+typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::interval_type 
+enclosure(const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object)
 {
-    typedef IntervalMap<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> IntervalMapT;
+    typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> IntervalMapT;
     typedef typename IntervalMapT::interval_type interval_type;
     return 
         object.empty() ? neutron<interval_type>::value()
@@ -932,14 +934,13 @@
 
 template 
 <
-    class SubType, class DomainT, class CodomainT,
-    class Traits, template<class,ITL_COMPARE>class Interval, 
-    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc
+    class SubType, class DomainT, class CodomainT, class Traits, 
+    ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc
 >
-typename interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>::interval_type 
-enclosure(const interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>& object)
+typename interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::interval_type 
+enclosure(const interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object)
 {
-    typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> IntervalMapT;
+    typedef interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> IntervalMapT;
     typedef typename IntervalMapT::interval_type interval_type;
     return 
         object.empty() ? neutron<interval_type>::value()
Modified: sandbox/itl/boost/itl/map.hpp
==============================================================================
--- sandbox/itl/boost/itl/map.hpp	(original)
+++ sandbox/itl/boost/itl/map.hpp	2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -105,6 +105,7 @@
         class Traits = itl::neutron_absorber,
         ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, DomainT),
         ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, CodomainT),
+		ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, CodomainT), 
         ITL_ALLOC   Alloc   = std::allocator 
     >
     class map: private std::map<DomainT, CodomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), 
@@ -113,12 +114,12 @@
     public:
         typedef Alloc<typename std::pair<const DomainT, CodomainT> >  allocator_type;
 
-        typedef typename itl::map<DomainT,CodomainT,Traits, Compare,Combine,Alloc> type;
+        typedef typename itl::map<DomainT,CodomainT,Traits, Compare,Combine,Section,Alloc> type;
         typedef typename std::map<DomainT, CodomainT, ITL_COMPARE_DOMAIN(Compare,DomainT),
                                   allocator_type>              base_type;
         typedef typename itl::set<DomainT, Compare, Alloc >       set_type;
 
-        typedef itl::map<DomainT,CodomainT,itl::neutron_absorber,Compare,Combine,Alloc> 
+        typedef itl::map<DomainT,CodomainT,itl::neutron_absorber,Compare,Combine,Section,Alloc> 
                                                                neutron_absorber_type;
         typedef Traits traits;
 
@@ -316,60 +317,60 @@
 
     /** Standard equality, which is lexicographical equality of the sets
         as sequences, that are given by their Compare order. */
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    inline bool operator == (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& lhs,
-                             const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& rhs)
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    inline bool operator == (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& lhs,
+                             const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& rhs)
     {
         typedef std::map<DomainT,CodomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
         return operator==((const base_type&)lhs, (const base_type&)rhs);
     }
 
     //JODO comment... 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    inline bool is_element_equal(const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& lhs,
-                                 const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& rhs)
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    inline bool is_element_equal(const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& lhs,
+                                 const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& rhs)
     {
         typedef std::map<DomainT,CodomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
         return operator==((const base_type&)lhs, (const base_type&)rhs);
     }
 
     /** Protonic equality is equality on all elements that do not carry a neutron as content. */
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    inline bool is_protonic_equal (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& lhs,
-                                   const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& rhs)
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    inline bool is_protonic_equal (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& lhs,
+                                   const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& rhs)
     {
         //JODO: Efficient implementation.
         typedef std::map<DomainT,CodomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
 
-        itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc> lhs0 = lhs;
-        itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc> rhs0 = rhs;
+        itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc> lhs0 = lhs;
+        itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc> rhs0 = rhs;
         lhs0.absorb_neutrons();
         rhs0.absorb_neutrons();
         return operator==((const base_type&)lhs0, (const base_type&)rhs0);
     }
 
     /** Strict weak less ordering which is given by the Compare order */
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    inline bool operator < (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& lhs,
-        const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& rhs)
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    inline bool operator < (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& lhs,
+        const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& rhs)
     {
         typedef std::map<DomainT,CodomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
         return operator<((const base_type&)lhs, (const base_type&)rhs);
     }
 
     /** Partial ordering which is induced by Compare */
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    inline bool operator <= (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& lhs,
-        const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& rhs)
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    inline bool operator <= (const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& lhs,
+        const itl::map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& rhs)
     {
         typedef std::map<DomainT,CodomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
         return operator<=((const base_type&)lhs, (const base_type&)rhs);
     }
 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
         template <class Combiner>
-    typename map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>::iterator
-        map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>::add(const value_type& val)
+    typename map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>::iterator
+        map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>::add(const value_type& val)
     {
         if(Traits::absorbs_neutrons && val.CONT_VALUE == CodomainT())
             return end();
@@ -401,9 +402,9 @@
         }
     }
 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    typename map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>::size_type 
-        map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    typename map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>::size_type 
+        map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>
         ::erase(const value_type& value_pair)
     {
         if(Traits::absorbs_neutrons && value_pair.CONT_VALUE == CodomainT())
@@ -421,9 +422,9 @@
     }
 
 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    typename map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>::iterator
-        map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>::subtract(const value_type& val)
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    typename map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>::iterator
+        map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>::subtract(const value_type& val)
     {
         if(Traits::emits_neutrons)
             return add<inverse_data_combine>(val);
@@ -447,8 +448,8 @@
     }
 
 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    std::string map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>::as_string()const
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    std::string map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>::as_string()const
     { 
         std::string repr;
         const_FORALL_THIS(it) {
@@ -463,9 +464,9 @@
         return repr;
     }
 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
         template<class Predicate>
-    map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>
+    map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>
         ::erase_if(const Predicate& pred)
     {
         iterator it = begin();
@@ -477,10 +478,10 @@
     }
 
 
-    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
         template<class Predicate>
-    map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>
-        ::assign_if(const map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& src, const Predicate& pred)
+    map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>
+        ::assign_if(const map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& src, const Predicate& pred)
     {
         clear();
         const_iterator it = src.begin();
@@ -492,12 +493,12 @@
     }
     //-------------------------------------------------------------------------
     template <typename DomainT, typename CodomainT, class Traits, 
-              ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& 
-        insert(map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& object, 
-               const map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& insertee) 
+              ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& 
+        insert(map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& object, 
+               const map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& insertee) 
     {
-        typedef map<DomainT,CodomainT,Traits,Compare,Combine,Alloc> map_type;
+        typedef map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc> map_type;
 
         const_FORALL(typename map_type, elem_, insertee) 
             object.insert(*elem_); 
@@ -506,12 +507,12 @@
     }
 
     template <typename DomainT, typename CodomainT, class Traits, 
-              ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& 
-        erase(map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& object, 
-              const map<DomainT,CodomainT,Traits,Compare,Combine,Alloc>& erasee) 
+              ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
+    map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& 
+        erase(map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& object, 
+              const map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc>& erasee) 
     {
-        typedef map<DomainT,CodomainT,Traits,Compare,Combine,Alloc> map_type;
+        typedef map<DomainT,CodomainT,Traits,Compare,Combine,Section,Alloc> map_type;
 
         const_FORALL(typename map_type, elem_, erasee) 
             object.erase(*elem_); 
Modified: sandbox/itl/boost/itl/notate.hpp
==============================================================================
--- sandbox/itl/boost/itl/notate.hpp	(original)
+++ sandbox/itl/boost/itl/notate.hpp	2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -79,6 +79,7 @@
 
 #define ITL_USE_COMPARE_TEMPLATE_TEMPLATE
 #define ITL_USE_COMBINE_TEMPLATE_TEMPLATE
+#define ITL_USE_SECTION_TEMPLATE_TEMPLATE
 
 //------------------------------------------------------------------------------
 // template parameter Compare can not be a template type parameter as long as
@@ -109,6 +110,18 @@
 #endif
 
 //------------------------------------------------------------------------------
+// template parameter Section could be a template type parameter.
+#ifdef ITL_USE_SECTION_TEMPLATE_TEMPLATE
+#   define ITL_SECTION template<class>class
+#   define ITL_SECTION_CODOMAIN(itl_intersect, codomain_type) itl_intersect<codomain_type> 
+#   define ITL_SECTION_INSTANCE(section_instance,codomain_type) section_instance
+#else//ITL_USE_SECTION_TEMPLATE_TYPE
+#   define ITL_SECTION class
+#   define ITL_SECTION_CODOMAIN(itl_intersect, codomain_type) itl_intersect 
+#   define ITL_SECTION_INSTANCE(section_instance,codomain_type) section_instance<codomain_type>
+#endif
+
+//------------------------------------------------------------------------------
 #define ITL_ALLOC    template<class>class
 
 #endif // __itl_NOTATE_H_JOFA_990119__
Modified: sandbox/itl/boost/itl/rational.hpp
==============================================================================
--- sandbox/itl/boost/itl/rational.hpp	(original)
+++ sandbox/itl/boost/itl/rational.hpp	2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -7,9 +7,7 @@
 +----------------------------------------------------------------------------*/
 
 /*-----------------------------------------------------------------------------
-itl_ptime provides adapter code for boost::posix_time::ptime.
-It implements incrementation (++) decrementation (--) and a neutral element
-w.r.t. addition (neutron()).
+itl_rational provides adapter code for boost::rational.
 -----------------------------------------------------------------------------*/
 
 #ifndef __itl_rational_JOFA_080913_H__
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-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -129,23 +129,24 @@
         typename DomainT,
         typename CodomainT,
         class Traits = itl::neutron_absorber,
-        template<class,ITL_COMPARE>class Interval = itl::interval,
         ITL_COMPARE Compare  = ITL_COMPARE_INSTANCE(std::less, DomainT),
         ITL_COMBINE Combine  = ITL_COMBINE_INSTANCE(itl::inplace_plus, CodomainT),
+		ITL_SECTION Section  = ITL_SECTION_INSTANCE(itl::inplace_star, CodomainT), 
+		template<class,ITL_COMPARE>class Interval = itl::interval,
         ITL_ALLOC   Alloc    = std::allocator
     >
     class split_interval_map:
-        public interval_base_map<split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>, 
-                                 DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+        public interval_base_map<split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>, 
+                                 DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     {
     public:
         typedef Traits traits;
-        typedef split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> type;
-        typedef       interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> joint_type;
-        typedef interval_base_map <split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>, 
-                                   DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc> base_type;
+        typedef split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> type;
+        typedef       interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> joint_type;
+        typedef interval_base_map <split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>, 
+                                   DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> base_type;
 
-        typedef split_interval_map<DomainT,CodomainT,itl::neutron_absorber,Interval,Compare,Combine,Alloc>
+        typedef split_interval_map<DomainT,CodomainT,itl::neutron_absorber,Compare,Combine,Section,Interval,Alloc>
             neutron_absorber_type;
 
         typedef Interval<DomainT,Compare> interval_type;
@@ -175,16 +176,16 @@
         template<class SubType>
         split_interval_map& operator =
             (const interval_base_map<SubType,DomainT,CodomainT,
-                                     Traits,Interval,Compare,Combine,Alloc>& src)
+                                     Traits,Compare,Combine,Section,Interval,Alloc>& src)
         { assign(src); return *this; }
 
         /// Assignment from a base interval_map.
         template<class SubType>
         void assign(const interval_base_map<SubType,DomainT,CodomainT,
-                                            Traits,Interval,Compare,Combine,Alloc>& src)
+                                            Traits,Compare,Combine,Section,Interval,Alloc>& src)
         {
             typedef interval_base_map<SubType,DomainT,CodomainT,
-                                      Traits,Interval,Compare,Combine,Alloc> base_map_type;
+                                      Traits,Compare,Combine,Section,Interval,Alloc> base_map_type;
             this->clear();
             // Can be implemented via _map.insert: Interval joining not necessary.
             const_FORALL(typename base_map_type, it, src) 
@@ -199,8 +200,8 @@
                 // friend declaration:
         friend class  
                         interval_base_map
-			<split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>, 
-                                DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc  >;
+			<split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>, 
+                                DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc  >;
 
         bool contains_(const value_type& x)const;
 
@@ -240,8 +241,8 @@
     } ;
 
 
-    template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-    bool split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+    template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+    bool split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
         ::contains_(const value_type& interv_value)const
     {
         interval_type interv = interv_value.KEY_VALUE;
@@ -257,8 +258,8 @@
 
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::fill(const value_type& value)
 {
     //collision free insert is asserted
@@ -270,9 +271,9 @@
 }
 
 template <typename DomainT, typename CodomainT, class Traits,
-          template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::fill_gap(const value_type& value)
 {
     //collision free insert is asserted
@@ -298,9 +299,9 @@
 //-----------------------------------------------------------------------------
 // add<Combinator>(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -387,9 +388,9 @@
     }
 }
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_rest(const interval_type& x_itv, const CodomainT& x_val, 
                iterator& it, iterator& end_it)
 {
@@ -416,9 +417,9 @@
     add_rear<Combiner>(x_rest, x_val, it);
 }
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::add_rear(const interval_type& x_rest, const CodomainT& x_val, iterator& it)
 {
     interval_type cur_itv = (*it).KEY_VALUE ;
@@ -451,9 +452,9 @@
 //-----------------------------------------------------------------------------
 // subtract<Combinator>(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::subtract_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -510,9 +511,9 @@
 
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
     template<class Combiner>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::subtract_rest(const interval_type& x_itv, const CodomainT& x_val, 
                     iterator& it, iterator& end_it)
 {
@@ -562,9 +563,9 @@
 //-----------------------------------------------------------------------------
 // insert(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, 
-          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, 
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::insert_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -619,9 +620,9 @@
 }
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, 
-          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, 
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::insert_rest(const interval_type& x_itv, const CodomainT& x_val, 
                   iterator& it, iterator& end_it)
 {
@@ -640,9 +641,9 @@
     insert_rear(x_rest, x_val, it);
 }
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, 
-          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, 
+          ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::insert_rear(const interval_type& x_rest, const CodomainT& x_val, 
                   iterator& it)
 {
@@ -664,8 +665,8 @@
 //-----------------------------------------------------------------------------
 // erase(pair(interval,value)):
 //-----------------------------------------------------------------------------
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::erase_(const value_type& x)
 {
     const interval_type& x_itv = x.KEY_VALUE;
@@ -723,8 +724,8 @@
 }
 
 
-template <typename DomainT, typename CodomainT, class Traits, template<class,ITL_COMPARE>class Interval, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_ALLOC Alloc>
-void split_interval_map<DomainT,CodomainT,Traits,Interval,Compare,Combine,Alloc>
+template <typename DomainT, typename CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, template<class,ITL_COMPARE>class Interval, ITL_ALLOC Alloc>
+void split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
     ::erase_rest(const interval_type& x_itv, const CodomainT& x_val, 
                  iterator& it, iterator& end_it)
 {
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-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -68,7 +68,7 @@
 typedef interval_map<ptime, GuestSetT> BoostPartyAttendenceHistoryT;
 
 // A party's height shall be defined as the maximum height of all guests ;-)
-typedef interval_map<ptime, int, neutron_absorber, interval, less, inplace_max > BoostPartyHeightHistoryT;
+typedef interval_map<ptime, int, neutron_absorber, less, inplace_max > BoostPartyHeightHistoryT;
 
 void boost_party()
 {
Modified: sandbox/itl/libs/itl/test/test_interval_map_shared.hpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_interval_map_shared.hpp	(original)
+++ sandbox/itl/libs/itl/test/test_interval_map_shared.hpp	2008-12-21 06:38:12 EST (Sun, 21 Dec 2008)
@@ -12,9 +12,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -160,9 +161,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -222,9 +224,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -276,9 +279,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -308,9 +312,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -358,9 +363,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -410,9 +416,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -453,9 +460,10 @@
 
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -516,9 +524,10 @@
 // Test for nontrivial intersection of interval maps with intervals and values
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -628,9 +637,10 @@
 // Test for nontrivial erasure of interval maps with intervals and interval sets
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>
@@ -744,9 +754,10 @@
 // Test first_collision
 template <template<class T, class U,
                    class Traits = neutron_absorber,
-                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, U),
                    ITL_COMBINE Combine = ITL_COMBINE_INSTANCE(itl::inplace_plus, U),
+                   ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_star, U),
+                   template<class,ITL_COMPARE>class Interval = interval,
                    ITL_ALLOC   Alloc   = std::allocator
                   >class IntervalMap, 
           class T, class U>