$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r50699 - in sandbox/itl: boost/itl boost/itl/type_traits libs/itl/test libs/itl/test/test_interval_map_mixed libs/itl/test/test_quantifier_map
From: afojgo_at_[hidden]
Date: 2009-01-21 08:34:45
Author: jofaber
Date: 2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
New Revision: 50699
URL: http://svn.boost.org/trac/boost/changeset/50699
Log:
Refactored. Rewriting op &= for IntervalMaps after Problems with .&. overloading. 
Next: Introduce IntervalMaps::domain_mapping_type and interval_mapping_type.
Stable {msvc-9.0, partly congcc-4.3-a7}  
Text files modified: 
   sandbox/itl/boost/itl/interval_base_map.hpp                                   |     2                                         
   sandbox/itl/boost/itl/interval_base_set.hpp                                   |     2                                         
   sandbox/itl/boost/itl/interval_map.hpp                                        |     1                                         
   sandbox/itl/boost/itl/interval_maps.hpp                                       |   333 ++++++++++++++++++++++++--------------- 
   sandbox/itl/boost/itl/interval_set.hpp                                        |     2                                         
   sandbox/itl/boost/itl/operators.hpp                                           |     2                                         
   sandbox/itl/boost/itl/separate_interval_set.hpp                               |     1                                         
   sandbox/itl/boost/itl/split_interval_map.hpp                                  |     2                                         
   sandbox/itl/boost/itl/split_interval_set.hpp                                  |     1                                         
   sandbox/itl/boost/itl/type_traits/is_combinable.hpp                           |    42 ++++                                    
   sandbox/itl/libs/itl/test/test_interval_map_mixed/test_interval_map_mixed.cpp |     1                                         
   sandbox/itl/libs/itl/test/test_laws.hpp                                       |     1                                         
   sandbox/itl/libs/itl/test/test_quantifier_map/test_quantifier_map_shared.cpp  |     2                                         
   sandbox/itl/libs/itl/test/test_quantifier_map_shared.hpp                      |    69 ++++----                                
   14 files changed, 288 insertions(+), 173 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	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -167,6 +167,8 @@
                               itl::neutron_absorber,Compare,Combine,Section,Interval,Alloc>
                               neutron_absorber_type;
 
+	typedef type overloadable_type;
+
     /// Domain type (type of the keys) of the map
     typedef DomainT   domain_type;
     /// Domain type (type of the keys) of the map
Modified: sandbox/itl/boost/itl/interval_base_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_base_set.hpp	(original)
+++ sandbox/itl/boost/itl/interval_base_set.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -119,6 +119,8 @@
     /// The designated \e derived or \e sub_type of this base class
     typedef SubType sub_type;
 
+	typedef type overloadable_type;
+
     /// The domain type of the set
     typedef DomainT   domain_type;
     /// The codomaintype is the same as domain_type
Modified: sandbox/itl/boost/itl/interval_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_map.hpp	(original)
+++ sandbox/itl/boost/itl/interval_map.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -127,6 +127,7 @@
     typedef Traits traits;
     typedef       interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> type;
     typedef split_interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> split_type;
+	typedef type overloadable_type;
     typedef type joint_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;
Modified: sandbox/itl/boost/itl/interval_maps.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_maps.hpp	(original)
+++ sandbox/itl/boost/itl/interval_maps.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -52,31 +52,7 @@
     return object; 
 }
 
-/*CL?
-template 
-<
-    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, 
-        ITL_COMPARE, ITL_COMBINE, ITL_SECTION, template<class,ITL_COMPARE>class, ITL_ALLOC
-    >
-    class IntervalMap
->
-interval_base_map<SubType,DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
-operator +
-(
-    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,Compare,Combine,Section,Interval,Alloc> ObjectT;
-	return ObjectT(object) += operand; 
-}
-*/
 //-----------------------------------------------------------------------------
-
 template 
 <
     class DomainT, class CodomainT, class Traits,
@@ -103,31 +79,6 @@
     return object; 
 }
 
-/*CL?
-template 
-<
-    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
->
-IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
-operator +
-(
-    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,Compare,Combine,Section,Interval,Alloc> ObjectT;
-	return ObjectT(object) += operand; 
-}
-*/
-//-----------------------------------------------------------------------------
-
 //--- value_type --------------------------------------------------------------
 template 
 <
@@ -151,63 +102,6 @@
     return object.add(operand); 
 }
 
-/*CL
-template 
-<
-    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
->
-IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
-operator +
-(
-             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,Compare,Combine,Section,Interval,Alloc> ObjectT;
-	return ObjectT(object) += operand; 
-}
-
-template 
-<
-    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
->
-IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> 
-operator +
-(
-    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::value_type& operand,
-             const IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object
-)
-{
-	typedef IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc> ObjectT;
-	return ObjectT(object) += operand; 
-}
-*/
-/*CL
-template<class ObjectT>
-ObjectT operator + (const ObjectT& object, const typename ObjectT::value_type& operand)
-{ return ObjectT(object) += operand; }
-
-template<class ObjectT>
-ObjectT operator + (const typename ObjectT::value_type& operand, const ObjectT& object)
-{ return ObjectT(object) += operand; }
-*/
-
-//-----------------------------------------------------------------------------
-
 //--- mapping_type ------------------------------------------------------------
 // Addition (+=) of a base value pair.
 /* Addition of an value pair <tt>x=(I,y)</tt>
@@ -244,31 +138,6 @@
 {
     return object.add(operand); 
 }
-
-/*
-template 
-<
-    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
->
-IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
-operator +
-(
-    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,Compare,Combine,Section,Interval,Alloc> ObjectT;
-	return ObjectT(object) += operand; 
-}
-*/
 //-----------------------------------------------------------------------------
 
 
@@ -808,8 +677,209 @@
 }
 
 //-----------------------------------------------------------------------------
+// intersection &=  
+//-----------------------------------------------------------------------------
+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 ObjectT object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+//-----------------------------------------------------------------------------
+template 
+<
+    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
+>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
+operator &=
+(
+          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,Compare,Combine,Section,Interval,Alloc> object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+//--- value_type --------------------------------------------------------------
+template 
+<
+    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
+>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
+operator &=
+(
+          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,Compare,Combine,Section,Interval,Alloc> object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+//--- mapping_type ------------------------------------------------------------
+template 
+<
+    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
+>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
+operator &=
+(
+          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,Compare,Combine,Section,Interval,Alloc> object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+//--- interval_type ------------------------------------------------------------
+template 
+<
+    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
+>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
+operator &=
+(
+          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,Compare,Combine,Section,Interval,Alloc> object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+//--- element_type ------------------------------------------------------------
+template 
+<
+    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
+>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
+operator &=
+(
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const typename IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>::domain_type& operand
+)
+{
+    typedef IntervalMap<DomainT,CodomainT,
+                        Traits,Compare,Combine,Section,Interval,Alloc> object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+//--- set_types ------------------------------------------------------------
+template 
+<
+    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,
+    template
+    <    
+        class, ITL_COMPARE, template<class,ITL_COMPARE>class, ITL_ALLOC
+    >
+    class IntervalSet
+>
+IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& 
+operator &=
+(
+          IntervalMap<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>& object,
+    const IntervalSet<DomainT,Compare,Interval,Alloc>& operand
+)
+{
+    typedef IntervalMap<DomainT,CodomainT,
+                        Traits,Compare,Combine,Section,Interval,Alloc> object_type;
+    object_type intersection;
+    object.add_intersection(intersection,operand);
+    object.swap(intersection);
+    return object;
+}
+
+
+
+
+
+//-----------------------------------------------------------------------------
 // intersection *=  
 //-----------------------------------------------------------------------------
+/*CL?
 template 
 <
     class SubType, class DomainT, class CodomainT, class Traits,
@@ -875,6 +945,7 @@
     object.swap(intersection);
     return object;
 }
+*/
 
 template 
 <
Modified: sandbox/itl/boost/itl/interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_set.hpp	(original)
+++ sandbox/itl/boost/itl/interval_set.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -118,6 +118,8 @@
                               DomainT,Compare,Interval,Alloc> base_type;
 
     typedef interval_set<DomainT,Compare,Interval,Alloc> type;
+	typedef type overloadable_type;
+
     typedef type joint_type;
 
     /// The domain type of the set
Modified: sandbox/itl/boost/itl/operators.hpp
==============================================================================
--- sandbox/itl/boost/itl/operators.hpp	(original)
+++ sandbox/itl/boost/itl/operators.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -46,7 +46,7 @@
 { return ObjectT(object) &= operand; }
 
 template<class ObjectT>
-ObjectT operator & (const typename ObjectT::type& object, const ObjectT& operand)//JODO: inhibit false overloads!
+ObjectT operator & (const typename ObjectT::overloadable_type& object, const ObjectT& operand)
 { return ObjectT(object) &= operand; }
 
 }} // namespace itl boost
Modified: sandbox/itl/boost/itl/separate_interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/separate_interval_set.hpp	(original)
+++ sandbox/itl/boost/itl/separate_interval_set.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -82,6 +82,7 @@
                               DomainT,Compare,Interval,Alloc> base_type;
 
     typedef separate_interval_set<DomainT,Compare,Interval,Alloc> type;
+	typedef type overloadable_type;
 
     typedef interval_set<DomainT,Compare,Interval,Alloc> joint_type;
 
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	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -143,6 +143,8 @@
         typedef Traits traits;
         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 type overloadable_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;
 
Modified: sandbox/itl/boost/itl/split_interval_set.hpp
==============================================================================
--- sandbox/itl/boost/itl/split_interval_set.hpp	(original)
+++ sandbox/itl/boost/itl/split_interval_set.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -102,6 +102,7 @@
 
         typedef split_interval_set<DomainT,Compare,Interval,Alloc> type;
         typedef interval_set<DomainT,Compare,Interval,Alloc> joint_type;
+		typedef type overloadable_type;
 
         /// The domain type of the set
         typedef DomainT   domain_type;
Modified: sandbox/itl/boost/itl/type_traits/is_combinable.hpp
==============================================================================
--- sandbox/itl/boost/itl/type_traits/is_combinable.hpp	(original)
+++ sandbox/itl/boost/itl/type_traits/is_combinable.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -10,27 +10,44 @@
 
 #include <boost/mpl/bool.hpp> 
 #include <boost/mpl/if.hpp> 
+#include <boost/mpl/and.hpp> 
+#include <boost/type_traits/is_same.hpp>
 #include <boost/itl/type_traits/is_interval_splitter.hpp> 
 
 namespace boost{namespace itl
 {
 
+template<class Type>
+struct is_overloadable
+{
+	enum { value = is_same<Type, typename Type::overloadable_type>::value };
+};
+
+
+
 template<class Type, class AssociateT>
 struct is_combinable;
 
 template<class Type>
-struct is_combinable<Type, typename Type::value_type>       { enum{ value = true }; };
+struct is_combinable<Type, typename Type::value_type>       
+{ enum{ value = is_overloadable<Type>::value }; };
+
 template<class Type>
-struct is_combinable<Type, typename Type::mapping_pair_type>{ enum{ value = true }; };
+struct is_combinable<Type, typename Type::mapping_pair_type>
+{ enum{ value = is_overloadable<Type>::value }; };
+
 template<class Type>
-struct is_combinable<Type, typename Type::base_type>        { enum{ value = true }; };
+struct is_combinable<Type, typename Type::base_type>        
+{ enum{ value = is_overloadable<Type>::value }; };
+
 template<class Type>
-struct is_combinable<Type, typename Type::joint_type>       { enum{ value = true }; };
+struct is_combinable<Type, typename Type::joint_type>       
+{ enum{ value = is_overloadable<Type>::value }; };
 
 template<class Type>
 struct is_combinable<Type, typename Type::separate_type>    
 { 
-	enum{ value = is_interval_splitter<Type>::value }; 
+	enum{ value = mpl::and_<is_interval_splitter<Type>, is_overloadable<Type> >::value }; 
 };
 
 template<class Type, class AssociateT>
@@ -39,6 +56,21 @@
         enum{ value = false };
 };
 
+/*
+template<class Type, class AssociateT>
+struct is_combinable2;
+
+template<class Type>
+struct is_combinable2<Type, typename Type::interval_type>       
+{ enum{ value = is_overloadable<Type>::value }; };
+
+template<class Type, class AssociateT>
+struct is_combinable2
+{
+	enum{ value = is_combinable2<Type, AssociateT>::value };
+};
+*/
+
 }} // namespace itl boost
 
 #endif
Modified: sandbox/itl/libs/itl/test/test_interval_map_mixed/test_interval_map_mixed.cpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_interval_map_mixed/test_interval_map_mixed.cpp	(original)
+++ sandbox/itl/libs/itl/test/test_interval_map_mixed/test_interval_map_mixed.cpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -783,6 +783,7 @@
     std::pair<interval<T>,U> I1_3D_1(I1_3D, u1);
     std::pair<interval<T>,U> I1_3D_2(I1_3D, u2);
     std::pair<interval<T>,U> I1_8D_1(I1_8D, u1);
+	//typename SplitIntervalMapT::value_type I1_8D_1(I1_8D, u1);
     std::pair<interval<T>,U> I2_7D_1(I2_7D, u1);
     std::pair<interval<T>,U> I2_3D_1(I2_3D, u1);
     std::pair<interval<T>,U> I2_3D_3(I2_3D, u3);
Modified: sandbox/itl/libs/itl/test/test_laws.hpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_laws.hpp	(original)
+++ sandbox/itl/libs/itl/test/test_laws.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -154,6 +154,7 @@
 DEFINE_MONOID_CHECK_WRT_EQUAL(et);
 
 #define CHECK_MONOID_WRT(op_tag) check_monoid_wrt_##op_tag
+#define CHECK_MONOID_WRT_EQUAL(op_tag) check_monoid_wrt_equal_##op_tag
 
 
 #endif // __test_itl_laws_h_JOFA_080920__
Modified: sandbox/itl/libs/itl/test/test_quantifier_map/test_quantifier_map_shared.cpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_quantifier_map/test_quantifier_map_shared.cpp	(original)
+++ sandbox/itl/libs/itl/test/test_quantifier_map/test_quantifier_map_shared.cpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -12,5 +12,5 @@
 
 BOOST_AUTO_TEST_CASE_TEMPLATE
 (test_itl_quantifier_map_check_monoid_4_bicremental_types, T, bicremental_types)
-{         quantifier_map_check_monoid_4_bicremental_types<T, std::string, neutron_emitter>();}
+{         quantifier_map_check_monoid_4_bicremental_types<T, int, neutron_emitter>();}
 
Modified: sandbox/itl/libs/itl/test/test_quantifier_map_shared.hpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_quantifier_map_shared.hpp	(original)
+++ sandbox/itl/libs/itl/test/test_quantifier_map_shared.hpp	2009-01-21 08:34:43 EST (Wed, 21 Jan 2009)
@@ -93,9 +93,6 @@
 const typename JointMapT::value_type& val_pair, const mapping_pair<T,U>& map_pair
 )
 {
-    typedef interval_map<T,U> IntervalMapT;
-    typedef split_interval_map<T,U> SplitIntervalMapT;
-
         //-----------------------------------------------------------------------------
         CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), join_map_a, join_map_b, val_pair);
         CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), join_map_a, val_pair, join_map_b);
@@ -104,24 +101,25 @@
         CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), join_map_c, map_pair, join_map_b);
 
         //-----------------------------------------------------------------------------
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_a, split_map_b, val_pair);
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_a, val_pair, split_map_b);
+	CHECK_MONOID_WRT(plus)(neutron<SplitMapT>::value(), split_map_a, split_map_b, val_pair);
+	CHECK_MONOID_WRT(plus)(neutron<SplitMapT>::value(), split_map_a, val_pair, split_map_b);
 
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_c, split_map_b, map_pair);
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_c, map_pair, split_map_b);
+	CHECK_MONOID_WRT(plus)(neutron<SplitMapT>::value(), split_map_c, split_map_b, map_pair);
+	CHECK_MONOID_WRT(plus)(neutron<SplitMapT>::value(), split_map_c, map_pair, split_map_b);
 
         //-----------------------------------------------------------------------------
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_a, join_map_b, split_map_c);
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_a, split_map_b, join_map_c);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, join_map_b, split_map_c);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, split_map_b, join_map_c);
+
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, join_map_b, join_map_c);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, join_map_b, join_map_c);
 
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_a, join_map_b, join_map_c);
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_a, join_map_b, join_map_c);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, join_map_b, map_pair);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, map_pair, join_map_b);
 
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_c, join_map_b, map_pair);
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_c, map_pair, join_map_b);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, join_map_b, val_pair);
+	CHECK_MONOID_WRT_EQUAL(plus)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, val_pair, join_map_b);
 
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_c, join_map_b, val_pair);
-	CHECK_MONOID_WRT(plus)(neutron<JointMapT>::value(), split_map_c, val_pair, join_map_b);
 }
 
 
@@ -133,9 +131,6 @@
 const typename JointMapT::value_type& val_pair, const mapping_pair<T,U>& map_pair
 )
 {
-    typedef interval_map<T,U> IntervalMapT;
-    typedef split_interval_map<T,U> SplitIntervalMapT;
-
         //-----------------------------------------------------------------------------
         CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), join_map_a, join_map_b, val_pair);
         CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), join_map_a, val_pair, join_map_b);
@@ -144,24 +139,25 @@
         CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), join_map_c, map_pair, join_map_b);
 
         //-----------------------------------------------------------------------------
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_a, split_map_b, val_pair);
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_a, val_pair, split_map_b);
+	CHECK_MONOID_WRT(et)(neutron<SplitMapT>::value(), split_map_a, split_map_b, val_pair);
+	CHECK_MONOID_WRT(et)(neutron<SplitMapT>::value(), split_map_a, val_pair, split_map_b);
 
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_c, split_map_b, map_pair);
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_c, map_pair, split_map_b);
+	CHECK_MONOID_WRT(et)(neutron<SplitMapT>::value(), split_map_c, split_map_b, map_pair);
+	CHECK_MONOID_WRT(et)(neutron<SplitMapT>::value(), split_map_c, map_pair, split_map_b);
 
         //-----------------------------------------------------------------------------
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_a, join_map_b, split_map_c);
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_a, split_map_b, join_map_c);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, join_map_b, split_map_c);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, split_map_b, join_map_c);
 
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_a, join_map_b, join_map_c);
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_a, join_map_b, join_map_c);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, join_map_b, join_map_c);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_a, join_map_b, join_map_c);
 
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_c, join_map_b, map_pair);
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_c, map_pair, join_map_b);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, join_map_b, map_pair);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, map_pair, join_map_b);
+
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, join_map_b, val_pair);
+	CHECK_MONOID_WRT_EQUAL(et)(is_element_equal, neutron<SplitMapT>::value(), split_map_c, val_pair, join_map_b);
 
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_c, join_map_b, val_pair);
-	CHECK_MONOID_WRT(et)(neutron<JointMapT>::value(), split_map_c, val_pair, join_map_b);
 }
 
 template <class T, class U, class Trait>
@@ -175,7 +171,7 @@
         join_map_b.add(CDv(1,3,1)).add(IDv(8,9,1));
         join_map_c.add(IDv(0,9,2)).add(IIv(3,6,1)).add(IDv(5,7,1));
 
-	IntervalMapT split_map_a, split_map_b, split_map_c;
+	SplitIntervalMapT split_map_a, split_map_b, split_map_c;
         split_map_a.add(IDv(0,6,2)).add(IDv(5,7,1)).add(IDv(9,10,2));
         split_map_b.add(IDv(2,3,3)).add(IIv(9,9,3)).add(CDv(9,11,2));
         split_map_c.add(CIv(0,9,2)).add(IIv(3,6,1)).add(CDv(5,7,1));
@@ -189,12 +185,15 @@
                 split_map_a, split_map_b, split_map_c, 
                 val_pair, map_pair);
 
-	//quantifier_map_check_monoid_instance_et(
-	//	join_map_a, join_map_b, join_map_c, 
-	//	split_map_a, split_map_b, split_map_c, 
-	//	val_pair, map_pair);
+	quantifier_map_check_monoid_instance_et(
+		join_map_a, join_map_b, join_map_c, 
+		split_map_a, split_map_b, split_map_c, 
+		val_pair, map_pair);
+
+	
 }
 
 
+
 #endif // __test_itl_quantifier_map_shared_h_JOFA_090119__