$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r58566 - in sandbox/itl: boost/itl boost/itl/detail boost/itl_xt boost/itl_xt/detail boost/validate/laws boost/validate/validater libs/itl/doxy_doc libs/itl/test/test_casual_ libs/validate/example libs/validate/example/de_morgan_ libs/validate/example/labat_single_ libs/validate/example/labat_val_relations_
From: afojgo_at_[hidden]
Date: 2009-12-29 11:55:54
Author: jofaber
Date: 2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
New Revision: 58566
URL: http://svn.boost.org/trac/boost/changeset/58566
Log:
Added a documented example for validate. Added file impl_config.hpp to choose an implementation for the implementings sets and maps.
Added:
   sandbox/itl/boost/itl/impl_config.hpp   (contents, props changed)
Text files modified: 
   sandbox/itl/boost/itl/detail/set_algo.hpp                                             |     9 ++++++                                  
   sandbox/itl/boost/itl/interval_base_map.hpp                                           |     4 +-                                      
   sandbox/itl/boost/itl/interval_base_set.hpp                                           |     4 +-                                      
   sandbox/itl/boost/itl/interval_map.hpp                                                |     2                                         
   sandbox/itl/boost/itl/map.hpp                                                         |    50 ++++++++++++++++++++++++++-----------   
   sandbox/itl/boost/itl/set.hpp                                                         |    52 ++++++++++++++++++++++++++------------- 
   sandbox/itl/boost/itl_xt/detail/bit_element_iterator.hpp                              |     1                                         
   sandbox/itl/boost/itl_xt/string_set.hpp                                               |     1                                         
   sandbox/itl/boost/validate/laws/induced_relation.hpp                                  |    35 ++++++++++++++++++++------              
   sandbox/itl/boost/validate/laws/law.hpp                                               |    32 +++++++++++++++++++++++-                
   sandbox/itl/boost/validate/validater/law_validater.hpp                                |    25 ++++++++++++++++---                     
   sandbox/itl/libs/itl/doxy_doc/Doxyfile                                                |     1                                         
   sandbox/itl/libs/itl/test/test_casual_/test_casual.cpp                                |     7 ++++                                    
   sandbox/itl/libs/validate/example/de_morgan_/de_morgan.cpp                            |     2                                         
   sandbox/itl/libs/validate/example/labat_single_/labat_single.cpp                      |    25 +++++++++++++-----                      
   sandbox/itl/libs/validate/example/labat_val_relations_/labat_val_relations.cpp        |     2                                         
   sandbox/itl/libs/validate/example/labat_val_relations_/vc9_labat_val_relations.vcproj |    28 ++++++++++----------                    
   sandbox/itl/libs/validate/example/vc9_validate_examples.sln                           |    18 +++++++++++++                           
   18 files changed, 222 insertions(+), 76 deletions(-)
Modified: sandbox/itl/boost/itl/detail/set_algo.hpp
==============================================================================
--- sandbox/itl/boost/itl/detail/set_algo.hpp	(original)
+++ sandbox/itl/boost/itl/detail/set_algo.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -163,6 +163,11 @@
         }
 
 
+#ifdef BOOST_MSVC 
+#pragma warning(push)
+#pragma warning(disable:4996) //'std::equal': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
+#endif                        // I do guarantee here that I am using the parameters correctly :)
+
         /** Function template <tt>lexicographical_equal</tt> implements 
             lexicographical equality. */
         template<class SetType>
@@ -174,6 +179,10 @@
                      && std::equal(left.begin(), left.end(), right.begin()); 
         }
 
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
 
         template<class SetType>
         void flip(SetType& result, const SetType& x2)
Added: sandbox/itl/boost/itl/impl_config.hpp
==============================================================================
--- (empty file)
+++ sandbox/itl/boost/itl/impl_config.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -0,0 +1,45 @@
+/*-----------------------------------------------------------------------------+
+Author: Joachim Faulhaber
+Copyright (c) 2009-2009: Joachim Faulhaber
++------------------------------------------------------------------------------+
+   Distributed under the Boost Software License, Version 1.0.
+      (See accompanying file LICENCE.txt or copy at
+           http://www.boost.org/LICENSE_1_0.txt)
++-----------------------------------------------------------------------------*/
+#ifndef  BOOST_ITL_IMPL_CONFIG_HPP_JOFA_091225
+#define  BOOST_ITL_IMPL_CONFIG_HPP_JOFA_091225
+
+/*-----------------------------------------------------------------------------+
+You can choose an implementation for the basic set and map classes.
+Select at most ONE of the following defines
++-----------------------------------------------------------------------------*/
+
+//#define ITL_USE_STD_IMPLEMENTATION
+//#define ITL_USE_BOOST_INTERPROCESS_IMPLEMENTATION
+//#define ITL_USE_BOOST_MOVE_IMPLEMENTATION
+
+/*-----------------------------------------------------------------------------+
+NO define or ITL_USE_STD_IMPLEMENTATION: Choose std::set and std::map as
+    implementing containers (default).
+
+ITL_USE_BOOST_INTERPROCESS_IMPLEMENTATION: Choose set and map implementations 
+    from boost::interprocess.
+
+ITL_USE_BOOST_MOVE_IMPLEMENTATION: Move aware containers from boost::container
+    (NEW) are used. Currently (January 2010) this is only experimental. 
+    boost::move from the boost::sandbox has to be used. This is depreciated for 
+    production code, as long as move aware containers are not officially 
+    accepted into boost. 
++-----------------------------------------------------------------------------*/
+
+#if defined(ITL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
+#define ITL_IMPL_SPACE boost::interprocess
+#elif defined(ITL_USE_BOOST_MOVE_IMPLEMENTATION)
+#define ITL_IMPL_SPACE boost::container
+#else
+#define ITL_IMPL_SPACE std
+#endif
+
+#endif // BOOST_ITL_IMPL_CONFIG_HPP_JOFA_091225
+
+
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-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -140,8 +140,8 @@
         allocator_type;
 
     /// Container type for the implementation 
-    typedef std::map<interval_type,codomain_type,
-                     key_compare,allocator_type> ImplMapT;
+    typedef ITL_IMPL_SPACE::map<interval_type,codomain_type,
+                                key_compare,allocator_type> ImplMapT;
 
     /// key type of the implementing container
     typedef typename ImplMapT::key_type   key_type;
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-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -99,7 +99,7 @@
     typedef Alloc<DomainT> domain_allocator_type;
 
     /// Container type for the implementation 
-    typedef typename std::set<interval_type,key_compare,allocator_type> ImplSetT;
+    typedef typename ITL_IMPL_SPACE::set<interval_type,key_compare,allocator_type> ImplSetT;
 
     /// key type of the implementing container
     typedef typename ImplSetT::key_type   key_type;
@@ -736,7 +736,7 @@
 {
     return std::lexicographical_compare(
         lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), 
-        Compare<Interval<DomainT,Compare> >()//NOTE DESIGN TTP: Why Compare is needs to be ttp
+        Compare<Interval<DomainT,Compare> >()//NOTE DESIGN TTP: Why Compare needs to be ttp
         );
 }
 
Modified: sandbox/itl/boost/itl/interval_map.hpp
==============================================================================
--- sandbox/itl/boost/itl/interval_map.hpp	(original)
+++ sandbox/itl/boost/itl/interval_map.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -540,7 +540,7 @@
 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>
 inline void interval_map<DomainT,CodomainT,Traits,Compare,Combine,Section,Interval,Alloc>
-    ::subtract_main(/*CL const interval_type& inter_val,*/ const CodomainT& co_val, iterator& it_, iterator& last_)
+    ::subtract_main(const CodomainT& co_val, iterator& it_, iterator& last_)
 {
     while(it_ != last_)
     {
Modified: sandbox/itl/boost/itl/map.hpp
==============================================================================
--- sandbox/itl/boost/itl/map.hpp	(original)
+++ sandbox/itl/boost/itl/map.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -8,6 +8,16 @@
 #ifndef BOOST_ITL_MAP_HPP_JOFA_070519
 #define BOOST_ITL_MAP_HPP_JOFA_070519
 
+#include <boost/itl/impl_config.hpp>
+
+#if defined(ITL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
+#include <boost/interprocess/containers/map.hpp>
+#elif defined(ITL_USE_BOOST_MOVE_IMPLEMENTATION)
+#include <boost/container/map.hpp>
+#else 
+#include <map>
+#endif
+
 #include <string>
 #include <boost/type_traits/ice.hpp>
 #include <boost/itl/detail/notate.hpp>
@@ -20,7 +30,6 @@
 #include <boost/itl/predicates.hpp>
 #include <boost/itl/set.hpp>
 #include <boost/itl/detail/map_algo.hpp>
-#include <map>
 
 
 namespace boost{namespace itl
@@ -81,15 +90,15 @@
     ITL_SECTION Section = ITL_SECTION_INSTANCE(itl::inplace_et, CodomainT), 
     ITL_ALLOC   Alloc   = std::allocator 
 >
-class map: private std::map<DomainT, CodomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), 
-                            Alloc<std::pair<const DomainT, CodomainT> > >
+class map: private ITL_IMPL_SPACE::map<DomainT, CodomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), 
+                                       Alloc<std::pair<const DomainT, CodomainT> > >
 {
 public:
     typedef Alloc<typename std::pair<const DomainT, CodomainT> >  allocator_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_IMPL_SPACE::map<DomainT, CodomainT, ITL_COMPARE_DOMAIN(Compare,DomainT),
+                                         allocator_type>   base_type;
     typedef typename itl::set<DomainT, Compare, Alloc >    set_type;
 
     typedef Traits traits;
@@ -139,10 +148,12 @@
     map(const key_compare& comp): base_type(comp){}
 
     template <class InputIterator>
-    map(InputIterator first, InputIterator past): base_type(first,past){} 
+    map(InputIterator first, InputIterator past)
+        : base_type(first,past){} 
 
     template <class InputIterator>
-    map(InputIterator first, InputIterator past, const key_compare& comp): base_type(first,past,comp) 
+    map(InputIterator first, InputIterator past, const key_compare& comp)
+        : base_type(first,past,comp) 
     {}
 
     map(const map& src): base_type::map(src)
@@ -707,16 +718,26 @@
 //==============================================================================
 //= Equivalences and Orderings
 //==============================================================================
+
+#ifdef BOOST_MSVC 
+#pragma warning(push)
+#pragma warning(disable:4996) //'std::equal': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
+#endif                        // I do guarantee here that I am using the parameters correctly :)
+
 /** Standard equality, which is lexicographical equality of the sets
     as sequences, that are given by their Compare order. */
 template <class DomainT, class 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);
+    return lhs.size() == rhs.size()
+        && equal(lhs.begin(), lhs.end(), rhs.begin());
 }
 
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
 template <class DomainT, class 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)
@@ -725,10 +746,7 @@
 template <class DomainT, class 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);
-}
+{ return lhs == rhs; }
 
 /** Protonic equality is equality on all elements that do not carry a neutron as content. */
 template <class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
@@ -743,8 +761,10 @@
 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);
+    return std::lexicographical_compare(
+        lhs.begin(), lhs.end(), rhs.begin(), rhs.end(), 
+        Compare<std::pair<DomainT,CodomainT> >()
+        );
 }
 
 template <class DomainT, class CodomainT, class Traits, ITL_COMPARE Compare, ITL_COMBINE Combine, ITL_SECTION Section, ITL_ALLOC Alloc>
Modified: sandbox/itl/boost/itl/set.hpp
==============================================================================
--- sandbox/itl/boost/itl/set.hpp	(original)
+++ sandbox/itl/boost/itl/set.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -8,8 +8,17 @@
 #ifndef BOOST_ITL_SET_HPP_JOFA_070519
 #define BOOST_ITL_SET_HPP_JOFA_070519
 
-#include <string>
+#include <boost/itl/impl_config.hpp>
+
+#if defined(ITL_USE_BOOST_INTERPROCESS_IMPLEMENTATION)
+#include <boost/interprocess/containers/set.hpp>
+#elif defined(ITL_USE_BOOST_MOVE_IMPLEMENTATION)
+#include <boost/container/set.hpp>
+#else 
 #include <set>
+#endif
+
+#include <string>
 #include <boost/itl/detail/concept_check.hpp>
 #include <boost/itl/type_traits/to_string.hpp>
 #include <boost/itl/type_traits/is_set.hpp>
@@ -29,6 +38,7 @@
 #include <boost/mpl/not.hpp> 
 #include <boost/type_traits/is_same.hpp>
 
+
 namespace boost{namespace itl
 {
 
@@ -39,11 +49,11 @@
     ITL_COMPARE Compare = ITL_COMPARE_INSTANCE(std::less, DomainT),
     ITL_ALLOC   Alloc   = std::allocator 
 >
-class set: private std::set<DomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), Alloc<DomainT> >
+class set: private ITL_IMPL_SPACE::set<DomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), Alloc<DomainT> >
 {
 public:
-    typedef typename itl::set<DomainT, Compare,       Alloc >       type;
-    typedef typename std::set<DomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), Alloc<DomainT> > base_type;
+    typedef typename itl::set<DomainT, Compare, Alloc> type;
+    typedef typename ITL_IMPL_SPACE::set<DomainT, ITL_COMPARE_DOMAIN(Compare,DomainT), Alloc<DomainT> > base_type;
 
 public:
     typedef DomainT     domain_type;
@@ -81,16 +91,15 @@
         BOOST_CONCEPT_ASSERT((LessThanComparableConcept<DomainT>));
     }
 
-    explicit set(const domain_compare& comp): 
-    std::set<DomainT, domain_compare, Alloc<DomainT> >(comp){}
+    explicit set(const domain_compare& comp): base_type(comp){}
 
     template <class InputIterator>
-    set(InputIterator first, InputIterator past): 
-    std::set<InputIterator>(first,past){}
+    set(InputIterator first, InputIterator past)
+        : base_type(first,past){}
 
     template <class InputIterator>
-    set(InputIterator first, InputIterator past, const key_compare& comp): 
-    std::set<InputIterator>(first, past, comp){}
+    set(InputIterator first, InputIterator past, const key_compare& comp)
+        : base_type(first, past, comp){}
 
     set(const set& src): base_type::set(src)
     {
@@ -335,16 +344,27 @@
 //==============================================================================
 //= Equivalences and Orderings
 //==============================================================================
+
+#ifdef BOOST_MSVC 
+#pragma warning(push)
+#pragma warning(disable:4996) //'std::equal': Function call with parameters that may be unsafe - this call relies on the caller to check that the passed values are correct. To disable this warning, use -D_SCL_SECURE_NO_WARNINGS. See documentation on how to use Visual C++ 'Checked Iterators'
+#endif                        // I do guarantee here that I am using the parameters correctly :)
+
 /** Standard equality, which is lexicographical equality of the sets
     as sequences, that are given by their Compare order. */
 template <typename DomainT, ITL_COMPARE Compare, ITL_ALLOC Alloc>
 inline bool operator == (const itl::set<DomainT,Compare,Alloc>& lhs,
                          const itl::set<DomainT,Compare,Alloc>& rhs)
 {
-    typedef std::set<DomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
-    return operator==((const base_type&)lhs, (const base_type&)rhs);
+    return lhs.size() == rhs.size()
+        && equal(lhs.begin(), lhs.end(), rhs.begin());
 }
 
+#ifdef BOOST_MSVC
+#pragma warning(pop)
+#endif
+
+
 template <typename DomainT, ITL_COMPARE Compare, ITL_ALLOC Alloc>
 inline bool operator != (const itl::set<DomainT,Compare,Alloc>& lhs,
                          const itl::set<DomainT,Compare,Alloc>& rhs)
@@ -354,17 +374,15 @@
 template <typename DomainT, ITL_COMPARE Compare, ITL_ALLOC Alloc>
 inline bool is_element_equal(const itl::set<DomainT,Compare,Alloc>& lhs,
                              const itl::set<DomainT,Compare,Alloc>& rhs)
-{
-    typedef std::set<DomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
-    return operator==((const base_type&)lhs, (const base_type&)rhs);
-}
+{ return lhs == rhs; }
 
 /** Strict weak less ordering which is given by the Compare order */
 template <typename DomainT, ITL_COMPARE Compare, ITL_ALLOC Alloc>
 inline bool operator < (const itl::set<DomainT,Compare,Alloc>& lhs,
                         const itl::set<DomainT,Compare,Alloc>& rhs)
 {
-    typedef std::set<DomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
+    typedef ITL_IMPL_SPACE
+        ::set<DomainT,ITL_COMPARE_DOMAIN(Compare,DomainT),Alloc<DomainT> > base_type;
     return operator<((const base_type&)lhs, (const base_type&)rhs);
 }
 
Modified: sandbox/itl/boost/itl_xt/detail/bit_element_iterator.hpp
==============================================================================
--- sandbox/itl/boost/itl_xt/detail/bit_element_iterator.hpp	(original)
+++ sandbox/itl/boost/itl_xt/detail/bit_element_iterator.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -236,6 +236,7 @@
 #ifdef BOOST_MSVC 
 #pragma warning(push)
 #pragma warning(disable:4146) // unary minus operator applied to unsigned type, result still unsigned
+#pragma warning(disable:4706) // assignment within conditional expression
 #endif                        
 
 
Modified: sandbox/itl/boost/itl_xt/string_set.hpp
==============================================================================
--- sandbox/itl/boost/itl_xt/string_set.hpp	(original)
+++ sandbox/itl/boost/itl_xt/string_set.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -76,7 +76,6 @@
     // sets of strings ordered ignoring case
     // ---------------------------------------------------------------------------------
 
-    typedef string_set<String_ICLess> ICstring_set; //CL depreciated
     typedef string_set<String_ICLess> ICstring_setD;
     
 
Modified: sandbox/itl/boost/validate/laws/induced_relation.hpp
==============================================================================
--- sandbox/itl/boost/validate/laws/induced_relation.hpp	(original)
+++ sandbox/itl/boost/validate/laws/induced_relation.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -51,6 +51,13 @@
 
     public:
 
+        size_t size()const 
+        { 
+            return 
+                value_size<SourceT>::apply(this->template getInputValue<operand_a>())+
+                value_size<SourceT>::apply(this->template getInputValue<operand_b>());
+        }
+
         bool holds()
         {
             // a rel b == f(a) rel f(b)
@@ -71,16 +78,28 @@
             return lhs == rhs;
         }
 
-        size_t size()const 
-        { 
-            return 
-                value_size<SourceT>::apply(this->template getInputValue<operand_a>())+
-                value_size<SourceT>::apply(this->template getInputValue<operand_b>());
-        }
-
         bool debug_holds()
         {
-            return holds();
+            // a rel b == f(a) rel f(b)
+            // --- left hand side ------------------------
+            // lhs := a rel b
+            SourceT a = this->template getInputValue<operand_a>();
+            SourceT b = this->template getInputValue<operand_b>();
+            std::cout << "  a  = " << a << std::endl;
+            std::cout << "  b  = " << b << std::endl;
+            bool lhs = RelationT<SourceT>()(a,b);
+            // --- right hand side -----------------------
+            TargetT f_a, f_b;
+            FunctionT<TargetT,SourceT>()(f_a, a);
+            FunctionT<TargetT,SourceT>()(f_b, b);
+            std::cout << "f(a) = " << f_a << std::endl;
+            std::cout << "f(b) = " << f_b << std::endl;
+            bool rhs = RelationT<TargetT>()(f_a, f_b);
+
+            this->template setOutputValue<lhs_result>(lhs);
+            this->template setOutputValue<rhs_result>(rhs);
+
+            return lhs == rhs;
         }
 
     }; //class InducedRelation
Modified: sandbox/itl/boost/validate/laws/law.hpp
==============================================================================
--- sandbox/itl/boost/validate/laws/law.hpp	(original)
+++ sandbox/itl/boost/validate/laws/law.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -17,7 +17,8 @@
 namespace boost{namespace itl
 {
 
-    /** abstract template class Law:
+    /** \brief An abstract class template Law
+
         A Law can hold for a given set of variables.
         A Law together with the set of input variables is an instance of the law.
         The evaluation of the law results in a set of output variables.
@@ -38,47 +39,75 @@
         typedef typename Loki::tuple<OutputTypes> output_tuple;
 
     public:
+        /** Function \c holds yields true if the law holds for a given instantiation
+            of the input variables. */
         bool holds(){ return that()->holds(); }
+
+        /** Function \c debug_holds is called at the end of a series of randomly
+            generated tests on the smallest law instantiation that violates the
+            law. Specific laws derived from class \c Law shall be coded to provide
+            informations useful for debugging. */
         bool debug_holds(){ return that()->debug_holds(); }
 
+        /** Set input variables for a law. */
         void setInstance(const input_tuple& inVars)
         { _inputTuple = inVars; }
 
+        /** Get input and output variables. */
         void getInstance(input_tuple& inVars, output_tuple& outVars)const
         { inVars = _inputTuple; outVars = _outputTuple; }
 
+        /** Get input variables. */
         void getInputInstance(input_tuple& inVars)const
         { inVars = _inputTuple; }
 
+        /** Get output variables. */
         void getOutputInstance(output_tuple& outVars)const
         { outVars = _outputTuple; }
 
+        /** Get the size of a laws instantiation, that is a function of it's 
+            input variables. The size function is used to filter small and simple
+            violations of laws in order to facilitate debugging. */
         size_t size()const{ return that()->size(); }
 
+        /** A size equivalence on laws. */
         bool operator == (const Law& rhs)const
         { return size() == rhs.size(); }
 
+        /** A size order on laws. This ordering servers filter small and simple
+            law instances that violate the law. */
         bool operator < (const Law& rhs)const
         { return size() < rhs.size(); }
 
+        /// The name of the law
         std::string name()const       { return that()->name(); }
+        /// A formula for the law
         std::string formula()const    { return that()->formula(); }
+        /// A string that represents the Laws type instantiation.
         std::string typeString()const { return that()->typeString(); }
 
+        /** Set a value for a laws input variable, indicated by it's \index in
+            the tuple of input variables */
         template<unsigned int index>
         typename Loki::TL::TypeAt<InputTypes, index>::Result 
             setInputValue(const typename Loki::TL::TypeAt<InputTypes, index>::Result& value) 
         { return Loki::tup::refer<index>(_inputTuple)=value; }
 
+        /** Get the value for a laws input variable, indicated by it's \index in
+            the tuple of input variables */
         template<unsigned int index>
         typename Loki::TL::TypeAt<InputTypes, index>::Result getInputValue()const 
         { return Loki::tup::get<index>(_inputTuple); }
 
+        /** Set a value for a laws output variable, indicated by it's \index in
+            the tuple of output variables */
         template<unsigned int index>
         typename Loki::TL::TypeAt<OutputTypes, index>::Result 
             setOutputValue(const typename Loki::TL::TypeAt<OutputTypes, index>::Result& value) 
         { return Loki::tup::refer<index>(_outputTuple)=value; }
 
+        /** Get the value for a laws output variable, indicated by it's \index in
+            the tuple of output variables */
         template<unsigned int index>
         typename Loki::TL::TypeAt<OutputTypes, index>::Result getOutputValue()const 
         { return Loki::tup::get<index>(_outputTuple); }
@@ -92,7 +121,6 @@
         output_tuple _outputTuple;
     };
 
-
     enum InputVarIndex  { operand_a, operand_b, operand_c, operand_d, operand_e };
     enum OutputVarIndex { lhs_result, rhs_result };
 
Modified: sandbox/itl/boost/validate/validater/law_validater.hpp
==============================================================================
--- sandbox/itl/boost/validate/validater/law_validater.hpp	(original)
+++ sandbox/itl/boost/validate/validater/law_validater.hpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -28,25 +28,42 @@
     typedef itl::map<std::string, int> ViolationCounterT;
     typedef itl::map<std::string, PolyLawViolations> ViolationMapT;
 
+    /** \brief An interface for a test machine.    */
     class LawValidaterI
     {
     public:
+        /// Virtual dtor
         virtual ~LawValidaterI(){}
+        /// Initialize the validater
         virtual void init()=0;
+
+        /** \brief Run tests on the law. 
+            
+            Generate law instantiations, test the law on 
+            them. Collect violations, if they occur. */
         virtual void run()=0;
+
+        /// Add statistics of the validater's run to \c ValidationCounterT
         virtual void addFrequencies(ValidationCounterT&)=0;
+        /// Add statistics and law violations to book keeper objects.
         virtual void addViolations(ViolationCounterT&, ViolationMapT&)=0;
     };
 
 
+    /** \brief A class template for test machines. 
+        
+        Class template \c LawValidater defines a testmachine
+        for a given law \c LawT and a generator template, that
+        produces a matching generator of input variables for the law.
+    */
     template <class LawT, template<typename>class GentorT>
     class LawValidater : public LawValidaterI
     {
     public:
-        typedef typename LawT::input_types    input_types;
-        typedef typename LawT::output_types   output_types;
-        typedef typename LawT::input_tuple    input_tuple;
-        typedef typename LawT::output_tuple   output_tuple;
+        typedef typename LawT::input_types    input_types;  // The input types of the law to test
+        typedef typename LawT::output_types   output_types; // The output types of the law to test
+        typedef typename LawT::input_tuple    input_tuple;  // The tuple type for input variables of the law
+        typedef typename LawT::output_tuple   output_tuple; // The tuple type for input variables of the law
         
         typedef typename Loki::TL::MapType<GentorT, input_types>::Result gentor_types;
         typedef typename Loki::tuple<gentor_types> input_gentor;
Modified: sandbox/itl/libs/itl/doxy_doc/Doxyfile
==============================================================================
--- sandbox/itl/libs/itl/doxy_doc/Doxyfile	(original)
+++ sandbox/itl/libs/itl/doxy_doc/Doxyfile	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -85,6 +85,7 @@
             ../../../boost/itl_xt/product_history.hpp \
             ../../../boost/itl_xt/tuple_computer.hpp \
             ../../../boost/validate/laws/law.hpp \
+            ../../../boost/validate/validater/law_validater.hpp \
             ../../../libs/itl/example/boost_party_ \
             ../../../libs/itl/example/interval_ \
             ../../../libs/itl/example/interval_ \
Modified: sandbox/itl/libs/itl/test/test_casual_/test_casual.cpp
==============================================================================
--- sandbox/itl/libs/itl/test/test_casual_/test_casual.cpp	(original)
+++ sandbox/itl/libs/itl/test/test_casual_/test_casual.cpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -38,7 +38,6 @@
 using namespace unit_test;
 using namespace boost::itl;
 
-
 BOOST_AUTO_TEST_CASE(reverse_iter)
 {
     interval_map<int,int> map_a;
@@ -60,3 +59,9 @@
     cout << map_a << endl;
 }
 
+
+BOOST_AUTO_TEST_CASE(casual)
+{
+    itl::set<int> ion_set;
+}
+
Modified: sandbox/itl/libs/validate/example/de_morgan_/de_morgan.cpp
==============================================================================
--- sandbox/itl/libs/validate/example/de_morgan_/de_morgan.cpp	(original)
+++ sandbox/itl/libs/validate/example/de_morgan_/de_morgan.cpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -10,7 +10,7 @@
 
 /** Example de_morgan.cpp \file de_morgan.cpp
 
-Example de_morgan.cpp demonstrates some test of 
+Example de_morgan.cpp demonstrates some tests of 
 <a href="http://en.wikipedia.org/wiki/De_Morgan%27s_laws">
 De Morgan's law</a>
 on interval_set.
Modified: sandbox/itl/libs/validate/example/labat_single_/labat_single.cpp
==============================================================================
--- sandbox/itl/libs/validate/example/labat_single_/labat_single.cpp	(original)
+++ sandbox/itl/libs/validate/example/labat_single_/labat_single.cpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -23,6 +23,7 @@
 #include <boost/validate/laws/minor_set_laws.hpp>
 #include <boost/validate/laws/function_equality.hpp>
 #include <boost/validate/laws/atomic_equivalence.hpp>
+#include <boost/validate/laws/order.hpp>
 
 //#include <boost/validate/laws/novial_tree.hpp>
 #include <boost/validate/laws/inversion_laws.hpp>
@@ -46,14 +47,24 @@
 void test_LawValidater()
 {
 
-    typedef UnaryAtomicEquivalence2
-    <
-        itl::interval_map<int,int>, 
-        //itl::list<int>,
-        std::pair<int,int>,
-        itl::std_find
-    > TestLawT;
+    //typedef UnaryAtomicEquivalence2
+    //<
+    //    itl::interval_map<int,int>, 
+    //    //itl::list<int>,
+    //    std::pair<int,int>,
+    //    itl::std_find
+    //> TestLawT;
+
+    //typedef InducedRelation
+    //<
+    //    itl::interval_map<int,int>, 
+    //    itl::map<int,int>, 
+    //    segmental::atomizer, 
+    //    element_equal
+    //>
+    //TestLawT;
 
+    typedef Antisymmetry<itl::map<int,int>, std::less_equal, std_equal> TestLawT;
 
     LawValidater<TestLawT, RandomGentor> test_law;
 
Modified: sandbox/itl/libs/validate/example/labat_val_relations_/labat_val_relations.cpp
==============================================================================
--- sandbox/itl/libs/validate/example/labat_val_relations_/labat_val_relations.cpp	(original)
+++ sandbox/itl/libs/validate/example/labat_val_relations_/labat_val_relations.cpp	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -26,7 +26,7 @@
     ">> ------------------------------------------------------ <<\n";
     GentorProfileSgl::it()->set_std_profile(20,1);
     GentorProfileSgl::it()->report_profile();
-    validater.terminate_at_law_count(33, 2);
+    //validater.terminate_at_law_count(33, 2);
     validater.validate();
 };
 
Modified: sandbox/itl/libs/validate/example/labat_val_relations_/vc9_labat_val_relations.vcproj
==============================================================================
--- sandbox/itl/libs/validate/example/labat_val_relations_/vc9_labat_val_relations.vcproj	(original)
+++ sandbox/itl/libs/validate/example/labat_val_relations_/vc9_labat_val_relations.vcproj	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -177,20 +177,6 @@
         </References>
         <Files>
                 <Filter
-			Name="Quelldateien"
-			Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
-			UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
-			>
-			<File
-				RelativePath="..\..\src\gentor\gentorprofile.cpp"
-				>
-			</File>
-			<File
-				RelativePath="..\labat_val_relations_\labat_val_relations.cpp"
-				>
-			</File>
-		</Filter>
-		<Filter
                         Name="Headerdateien"
                         Filter="h;hpp;hxx;hm;inl;inc;xsd"
                         UniqueIdentifier="{93995380-89BD-4b04-88EB-625FBE52EBFB}"
@@ -237,6 +223,20 @@
                         Filter="rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav"
                         UniqueIdentifier="{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}"
 			>
+			<Filter
+				Name="Quelldateien"
+				Filter="cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx"
+				UniqueIdentifier="{4FC737F1-C7A5-4376-A066-2A32D752A2FF}"
+				>
+				<File
+					RelativePath="..\..\src\gentor\gentorprofile.cpp"
+					>
+				</File>
+				<File
+					RelativePath="..\labat_val_relations_\labat_val_relations.cpp"
+					>
+				</File>
+			</Filter>
                 </Filter>
                 <File
                         RelativePath=".\ReadMe.txt"
Modified: sandbox/itl/libs/validate/example/vc9_validate_examples.sln
==============================================================================
--- sandbox/itl/libs/validate/example/vc9_validate_examples.sln	(original)
+++ sandbox/itl/libs/validate/example/vc9_validate_examples.sln	2009-12-29 11:55:52 EST (Tue, 29 Dec 2009)
@@ -27,6 +27,12 @@
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_de_morgan", "de_morgan_\vc9_de_morgan.vcproj", "{BF42574F-66E2-42DD-90D9-3A8FCE6F4740}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_labat_val_relations", "labat_val_relations_\vc9_labat_val_relations.vcproj", "{BF42574F-66E2-42DD-90D9-3A8FCE6F471F}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_labat_map_order", "labat_map_order_\vc9_labat_map_order.vcproj", "{BF42574F-66E2-42DD-90D9-3A8FCE6F4727}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "vc9_labat_signed_quantifier", "labat_signed_quantifier_\vc9_labat_signed_quantifier.vcproj", "{BF42574F-66E2-42DD-90D9-3A8FCE6F4721}"
+EndProject
 Global
         GlobalSection(SolutionConfigurationPlatforms) = preSolution
                 Debug|Win32 = Debug|Win32
@@ -85,6 +91,18 @@
                 {BF42574F-66E2-42DD-90D9-3A8FCE6F4740}.Debug|Win32.Build.0 = Debug|Win32
                 {BF42574F-66E2-42DD-90D9-3A8FCE6F4740}.Release|Win32.ActiveCfg = Release|Win32
                 {BF42574F-66E2-42DD-90D9-3A8FCE6F4740}.Release|Win32.Build.0 = Release|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F471F}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F471F}.Debug|Win32.Build.0 = Debug|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F471F}.Release|Win32.ActiveCfg = Release|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F471F}.Release|Win32.Build.0 = Release|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4727}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4727}.Debug|Win32.Build.0 = Debug|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4727}.Release|Win32.ActiveCfg = Release|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4727}.Release|Win32.Build.0 = Release|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4721}.Debug|Win32.ActiveCfg = Debug|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4721}.Debug|Win32.Build.0 = Debug|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4721}.Release|Win32.ActiveCfg = Release|Win32
+		{BF42574F-66E2-42DD-90D9-3A8FCE6F4721}.Release|Win32.Build.0 = Release|Win32
         EndGlobalSection
         GlobalSection(SolutionProperties) = preSolution
                 HideSolutionNode = FALSE