$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r67017 - in sandbox/tti/boost/tti: . detail
From: eldiener_at_[hidden]
Date: 2010-12-04 22:14:16
Author: eldiener
Date: 2010-12-04 22:14:14 EST (Sat, 04 Dec 2010)
New Revision: 67017
URL: http://svn.boost.org/trac/boost/changeset/67017
Log:
Updates to the macros
Text files modified: 
   sandbox/tti/boost/tti/TTIntrospection.hpp              |   241 +++++++++++++++++++++++++++++++++++++++ 
   sandbox/tti/boost/tti/detail/TTIntrospectionDetail.hpp |    31 ++--                                    
   2 files changed, 252 insertions(+), 20 deletions(-)
Modified: sandbox/tti/boost/tti/TTIntrospection.hpp
==============================================================================
--- sandbox/tti/boost/tti/TTIntrospection.hpp	(original)
+++ sandbox/tti/boost/tti/TTIntrospection.hpp	2010-12-04 22:14:14 EST (Sat, 04 Dec 2010)
@@ -30,7 +30,7 @@
   template<class T> \
   struct trait \
     { \
-    typedef typename tti::detail::hastype::trait<T>::type type; \
+    typedef typename tti::detail::trait<T>::type type; \
     \
     BOOST_STATIC_CONSTANT(bool,value=type::value); \
     }; \
@@ -45,6 +45,36 @@
   ) \
 /**/
 
+#define TTI_TRAIT_MFT_HAS_TYPE(trait,name) \
+namespace tti \
+  { \
+  namespace detail \
+    { \
+    TTI_DETAIL_TRAIT_HAS_TYPE(trait,name) \
+    } \
+  template<class T> \
+  struct trait \
+    { \
+    typedef typename \
+    tti::detail::eval \
+      < \
+      tti::detail::trait<T> \
+      >::type \
+    type; \
+    \
+    BOOST_STATIC_CONSTANT(bool,value=type::value); \
+    }; \
+  } \
+/**/
+
+#define TTI_MFT_HAS_TYPE(name) \
+  TTI_TRAIT_MFT_HAS_TYPE \
+  ( \
+  BOOST_PP_CAT(mft_has_type_,name), \
+  name \
+  ) \
+/**/
+
 #define TTI_TRAIT_MEMBER_TYPE(trait,name) \
 namespace tti \
   { \
@@ -59,8 +89,8 @@
     typedef typename \
       boost::mpl::eval_if \
         < \
-        tti::detail::hastype::trait<T>, \
-        tti::detail::membertype::trait<T>, \
+        tti::detail::trait<T>, \
+        tti::detail::member_type::trait<T>, \
         tti::detail::notype \
         >::type \
     type; \
@@ -76,6 +106,43 @@
   ) \
 /**/
   
+#define TTI_TRAIT_MFT_MEMBER_TYPE(trait,name) \
+namespace tti \
+  { \
+  namespace detail \
+    { \
+    TTI_DETAIL_TRAIT_HAS_TYPE(trait,name) \
+    TTI_DETAIL_TRAIT_MEMBER_TYPE(trait,name) \
+    } \
+  template<class T> \
+  struct trait \
+    { \
+    typedef typename \
+      boost::mpl::eval_if \
+        < \
+        tti::detail::eval \
+          < \
+          tti::detail::trait<T> \
+          >, \
+        tti::detail::eval \
+          < \
+          tti::detail::member_type::trait<T> \
+          >, \
+        tti::detail::notype \
+        >::type \
+    type; \
+    }; \
+  } \
+/**/
+
+#define TTI_MFT_MEMBER_TYPE(name) \
+  TTI_TRAIT_MFT_MEMBER_TYPE \
+  ( \
+  BOOST_PP_CAT(mft_member_type_,name), \
+  name \
+  ) \
+/**/
+  
 #define TTI_TRAIT_HAS_TYPE_CHECK_TYPEDEF(trait,name) \
 namespace tti \
   { \
@@ -129,6 +196,63 @@
   ) \
 /**/
 
+#define TTI_TRAIT_MFT_HAS_TYPE_CHECK_TYPEDEF(trait,name) \
+namespace tti \
+  { \
+  namespace detail \
+    { \
+    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, false) \
+    } \
+  \
+  template<class T,class U,class B> \
+  struct BOOST_PP_CAT(trait,_impl) \
+    { \
+    typedef typename \
+      boost::mpl::eval_if \
+        < \
+        boost::is_same<typename T::type::name,U>, \
+        boost::mpl::true_, \
+        boost::mpl::false_ \
+        >::type \
+    type; \
+    }; \
+  \
+  template<class T,class U> \
+  struct BOOST_PP_CAT(trait,_impl)<T,U,boost::mpl::false_::type> \
+    { \
+    typedef boost::mpl::false_::type type; \
+    }; \
+  \
+  template<class T,class U> \
+  struct trait \
+    { \
+    \
+    typedef typename \
+      BOOST_PP_CAT(trait,_impl) \
+      < \
+      T, \
+      U, \
+      typename \
+        tti::detail::eval \
+          < \
+          tti::detail::trait<T> \
+          >::type \
+      >::type \
+    type; \
+    \
+    BOOST_STATIC_CONSTANT(bool,value=type::value); \
+    }; \
+  } \
+/**/
+
+#define TTI_MFT_HAS_TYPE_CHECK_TYPEDEF(name) \
+  TTI_TRAIT_MFT_HAS_TYPE_CHECK_TYPEDEF \
+  ( \
+  BOOST_PP_CAT(mft_has_type_check_typedef_,name), \
+  name \
+  ) \
+/**/
+
 #define TTI_TRAIT_HAS_TEMPLATE(trait,name) \
 namespace tti \
   { \
@@ -447,6 +571,32 @@
     <
     class T,
     template<class> class HasMember,
+    class R,
+    BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(TTI_MAX_PARAMETERS,class P,tti::detail::noparam)
+    >
+  struct mf_mft_has_member_function :
+    tti::detail::eval
+      <
+      HasMember 
+        <
+        tti::detail::eval
+          <
+          tti::detail::ptmf
+            <
+            T,
+            R,
+            BOOST_PP_ENUM_PARAMS(TTI_MAX_PARAMETERS,P)
+            >
+          >
+        >
+      >
+    {
+    };
+    
+  template
+    <
+    class T,
+    template<class> class HasMember,
     class R
     >
   struct mf_has_member_data :
@@ -470,6 +620,30 @@
   template
     <
     class T,
+    template<class> class HasMember,
+    class R
+    >
+  struct mf_mft_has_member_data :
+    tti::detail::eval
+      <
+      HasMember 
+        <
+        tti::detail::eval
+          <
+          tti::detail::ptmd
+            <
+            T,
+            R
+            >
+          >
+        >
+      >
+    {
+    };
+    
+  template
+    <
+    class T,
     template<class,class> class HasStaticMember,
     class R,
     BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(TTI_MAX_PARAMETERS,class P,tti::detail::noparam)
@@ -497,6 +671,32 @@
     <
     class T,
     template<class,class> class HasStaticMember,
+    class R,
+    BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT(TTI_MAX_PARAMETERS,class P,tti::detail::noparam)
+    >
+  struct mf_mft_has_static_function :
+    tti::detail::eval
+      <
+      HasStaticMember 
+        <
+        T,
+        tti::detail::eval
+          <
+          tti::detail::tfunction
+            <
+            R,
+            BOOST_PP_ENUM_PARAMS(TTI_MAX_PARAMETERS,P)
+            >
+          >
+        >
+      >
+    {
+    };
+    
+  template
+    <
+    class T,
+    template<class,class> class HasStaticMember,
     class R
     >
   struct mf_has_static_data :
@@ -520,6 +720,30 @@
   template
     <
     class T,
+    template<class,class> class HasStaticMember,
+    class R
+    >
+  struct mf_mft_has_static_data :
+    tti::detail::eval
+      <
+      HasStaticMember 
+        <
+        T,
+        tti::detail::eval
+          <
+          tti::detail::tdata
+            <
+            R
+            >
+          >
+        >
+      >
+    {
+    };
+    
+  template
+    <
+    class T,
     template<class,class> class HasTypeCheckTypedef,
     class U
     >
@@ -528,6 +752,17 @@
     {
     };
     
+  template
+    <
+    class T,
+    template<class,class> class HasTypeCheckTypedef,
+    class U
+    >
+  struct mf_mft_has_type_check_typedef :
+    public mf_mft_has_static_data<T,HasTypeCheckTypedef,U>
+    {
+    };
+    
   }
   
 #endif // TT_INTROSPECTION_HPP
Modified: sandbox/tti/boost/tti/detail/TTIntrospectionDetail.hpp
==============================================================================
--- sandbox/tti/boost/tti/detail/TTIntrospectionDetail.hpp	(original)
+++ sandbox/tti/boost/tti/detail/TTIntrospectionDetail.hpp	2010-12-04 22:14:14 EST (Sat, 04 Dec 2010)
@@ -171,30 +171,27 @@
 /**/
 #endif
 
-#define TTI_DETAIL_TRAIT_MEMBER_TYPE(trait,name) \
-namespace membertype \
+#define TTI_DETAIL_TRAIT_HAS_TYPE(trait,name) \
+namespace mpl \
   { \
-  template<class T> \
-  struct trait \
-    { \
-    typedef typename T::name type; \
-    }; \
+  BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, false) \
   } \
+template<class T> \
+struct trait \
+  { \
+  typedef typename mpl::trait<T>::type type; \
+  \
+  BOOST_STATIC_CONSTANT(bool,value=type::value); \
+  }; \
 /**/
 
-#define TTI_DETAIL_TRAIT_HAS_TYPE(trait,name) \
-namespace hastype \
+#define TTI_DETAIL_TRAIT_MEMBER_TYPE(trait,name) \
+namespace member_type \
   { \
-  namespace mpl \
-    { \
-    BOOST_MPL_HAS_XXX_TRAIT_NAMED_DEF(trait, name, false) \
-    } \
   template<class T> \
   struct trait \
     { \
-    typedef typename mpl::trait<T>::type type; \
-    \
-    BOOST_STATIC_CONSTANT(bool,value=type::value); \
+    typedef typename T::name type; \
     }; \
   } \
 /**/
@@ -228,7 +225,7 @@
     struct eval;
     
 #define BOOST_PP_ITERATION_LIMITS (1,BOOST_PP_ADD(2,TTI_MAX_PARAMETERS))
-#define BOOST_PP_FILENAME_1 "TTIntrospectionIterateEval.hpp"
+#define BOOST_PP_FILENAME_1 <boost\tti\detail\TTIntrospectionIterateEval.hpp>
 #include BOOST_PP_ITERATE()
 
     template