Update of /cvsroot/boost/boost/boost/pending
In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv19760

Modified Files:
        ct_if.hpp 
Log Message:
Replaced the implementation of ct_if with a facade implementation that
defers to Boost.MPL.


Index: ct_if.hpp
===================================================================
RCS file: /cvsroot/boost/boost/boost/pending/ct_if.hpp,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- ct_if.hpp   30 Jan 2005 15:47:46 -0000      1.6
+++ ct_if.hpp   13 Nov 2006 15:35:54 -0000      1.7
@@ -3,107 +3,39 @@
 // accompanying file LICENSE_1_0.txt or copy at
 // http://www.boost.org/LICENSE_1_0.txt)
 
-// The ct_if implementation that avoids partial specialization is
-// based on the IF class by Ulrich W. Eisenecker and Krzysztof
-// Czarnecki.
+// This header replaces the implementation of ct_if that preceded the
+// introduction of Boost.MPL with a facade that defers to that reviewed and
+// accepted library.
+
+// Author: Ronald Garcia
+// Date: 20 October, 2006
+
 
 #ifndef BOOST_CT_IF_HPP
 #define BOOST_CT_IF_HPP
 
-#include <boost/config.hpp>
 
-/*
-  There is a bug in the Borland compiler with regards to using
-  integers to specialize templates. This made it hard to use ct_if in
-  the graph library. Changing from 'ct_if' to 'ct_if_t' fixed the
-  problem.
-*/
+// A stub implementation in terms of Boost.MPL
 
-#include <boost/type_traits/integral_constant.hpp> // true_type and false_type
+#include <boost/mpl/if.hpp>
+#include <boost/mpl/not.hpp>
+#include <boost/mpl/and.hpp>
+// true_type and false_type are used by applications of ct_if
+#include <boost/type_traits/integral_constant.hpp> 
 
 namespace boost {
 
-  struct ct_if_error { };
-
   template <class A, class B>
-  struct ct_and { typedef false_type type; };
-  template <> struct ct_and<true_type,true_type> { typedef true_type type; };
-
-  template <class A> struct ct_not { typedef ct_if_error type; };
-  template <> struct ct_not<true_type> { typedef false_type type; };
-  template <> struct ct_not<false_type> { typedef true_type type; };
+  struct ct_and : boost::mpl::and_<A,B> {};
 
-#ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
+  template <class A>
+  struct ct_not : mpl::not_<A> {};
 
-// agurt, 15/sep/02: in certain cases Borland has problems with
-// choosing the right 'ct_if' specialization even though 'cond' 
-// _does_ equal '1'; the easiest way to fix it is to make first 
-// 'ct_if' non-type template parameter boolean.
-#if !defined(__BORLANDC__)
   template <bool cond, class A, class B>
-  struct ct_if { typedef ct_if_error type; };
-  template <class A, class B>
-  struct ct_if<true, A, B> { typedef A type; };
-  template <class A, class B>
-  struct ct_if<false, A, B> { typedef B type; };
-#else
-  template <bool cond, class A, class B>
-  struct ct_if { typedef A type; };
-  template <class A, class B>
-  struct ct_if<false, A, B> { typedef B type; };
-#endif
-
-  template <class cond, class A, class B>
-  struct ct_if_t { typedef ct_if_error type; };
-  template <class A, class B>
-  struct ct_if_t<true_type, A, B> { typedef A type; };
-  template <class A, class B>
-  struct ct_if_t<false_type, A, B> { typedef B type; };
-
-#else
-
-  namespace detail {
-
-    template <int condition, class A, class B> struct IF;
-    template <int condition> struct SlectSelector;
-    struct SelectFirstType;
-    struct SelectSecondType;
-    
-    struct SelectFirstType {
-      template<class A, class B>
-      struct Template {        typedef A type; };
-    };
-    
-    struct SelectSecondType {
-      template<class A, class B>
-      struct Template { typedef B type; };
-    };
-    
-    template<int condition>
-    struct SlectSelector {
-      typedef SelectFirstType type;
-    };
-    
-    template <>
-    struct SlectSelector<0> {
-      typedef SelectSecondType type;
-    };
+  struct ct_if : mpl::if_c<cond,A,B> {};
 
-  } // namespace detail
-    
-  template<int condition, class A, class B>
-  struct ct_if
-  {
-    typedef typename detail::SlectSelector<condition>::type Selector;
-    typedef typename Selector::template Template<A, B>::type type;
-  };
-  
   template <class cond, class A, class B>
-  struct ct_if_t { 
-    typedef typename ct_if<cond::value, A, B>::type type;
-  };
-
-#endif
+  struct ct_if_t : mpl::if_<cond,A,B> {};
 
 } // namespace boost
 


-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Boost-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/boost-cvs

Reply via email to