moved Sniffer into new Examples directory
[senf.git] / Socket / SocketPolicy.ih
index 58fcba3..ba53c81 100644 (file)
@@ -1,6 +1,6 @@
 // $Id$
 //
-// Copyright (C) 2006 
+// Copyright (C) 2006
 // Fraunhofer Institut fuer offene Kommunikationssysteme (FOKUS)
 // Kompetenzzentrum fuer Satelitenkommunikation (SatCom)
 //     Stefan Bund <stefan.bund@fokus.fraunhofer.de>
 // Free Software Foundation, Inc.,
 // 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 
+/** \file
+    \brief Policy Framework internal header
+ */
+
 #ifndef IH_SocketPolicy_
 #define IH_SocketPolicy_ 1
 
 
 ///////////////////////////////ih.p////////////////////////////////////////
 
-namespace satcom {
-namespace lib {
+/// \cond disabled
+// Hide this code from doxygen
 
-#   define SATLIB_SOCKET_POLICIES_N BOOST_PP_SEQ_SIZE( SATLIB_SOCKET_POLICIES )
-    
-    // This REALLY is bad ... but we just need an Address member in
-    // AddressingPolicyBase as long as ClientSocketHandle /
-    // ServerSocketHandle don't make use of enable_if for each and
-    // every member they define ...
+namespace senf {
 
-    struct AddressingPolicyBase
-    {
-        virtual ~ AddressingPolicyBase() {}
-        
-        class Address 
-        {
-        private:
-            Address();
-        };
-    };
+#   define SENF_SOCKET_POLICIES_N BOOST_PP_SEQ_SIZE( SENF_SOCKET_POLICIES )
 
-#   define SP_DeclareBase(x1,x2,SomePolicy)                                             \
-        struct BOOST_PP_CAT(SomePolicy,Base)                                            \
-        { virtual ~ BOOST_PP_CAT(SomePolicy,Base) () {} };                              \
+#   define SP_DeclareAlias(x1,x2,SomePolicy)                                             \
         typedef BOOST_PP_CAT(SomePolicy,Base) BOOST_PP_CAT(Unspecified,SomePolicy);
 
-    BOOST_PP_SEQ_FOR_EACH( SP_DeclareBase, , BOOST_PP_SEQ_POP_FRONT( SATLIB_SOCKET_POLICIES ) )
+    BOOST_PP_SEQ_FOR_EACH( SP_DeclareAlias, , SENF_SOCKET_POLICIES )
+
+#   undef SP_DeclareAlias
 
-#   undef SP_DeclareBase
-        
     struct SocketPolicyBase
     {
         virtual ~SocketPolicyBase() {}
 
-#       define SP_DeclareTypedef(x1,x2,SomePolicy)                                              \
-            typedef BOOST_PP_CAT(SomePolicy,Base) SomePolicy;                                   \
-            BOOST_PP_CAT(SomePolicy,Base) BOOST_PP_CAT(BOOST_PP_CAT(the,SomePolicy),_);         \
-            virtual BOOST_PP_CAT(SomePolicy,Base) const & BOOST_PP_CAT(the,SomePolicy) () const \
-                { return BOOST_PP_CAT(BOOST_PP_CAT(the,SomePolicy),_); }
+#       define SP_Declare(x1,x2,SomePolicy)                                                     \
+            virtual BOOST_PP_CAT(SomePolicy,Base) const & BOOST_PP_CAT(the,SomePolicy) () const = 0;
 
-        BOOST_PP_SEQ_FOR_EACH( SP_DeclareTypedef, , SATLIB_SOCKET_POLICIES )
+        BOOST_PP_SEQ_FOR_EACH( SP_Declare, , SENF_SOCKET_POLICIES )
 
-#       undef SP_DeclareTypedef
+#       undef SP_Declare
     };
 
 #   define SP_TemplateArgs(x1,x2,n,SomePolicy)                                  \
         BOOST_PP_COMMA_IF( n )                                                  \
         class BOOST_PP_CAT(SomePolicy,_) = BOOST_PP_CAT(SomePolicy,Base)
 
-    template < BOOST_PP_SEQ_FOR_EACH_I( SP_TemplateArgs, , SATLIB_SOCKET_POLICIES ) >
+    template < BOOST_PP_SEQ_FOR_EACH_I( SP_TemplateArgs, , SENF_SOCKET_POLICIES ) >
     struct SocketPolicy
         : public SocketPolicyBase
     {
@@ -107,7 +92,7 @@ namespace lib {
         BOOST_PP_CAT(SomePolicy,Base) const & BOOST_PP_CAT(the,SomePolicy) () const     \
             { return BOOST_PP_CAT(BOOST_PP_CAT(the,SomePolicy),_); }
 
-        BOOST_PP_SEQ_FOR_EACH( SP_DeclarePolicyMember, , SATLIB_SOCKET_POLICIES )
+        BOOST_PP_SEQ_FOR_EACH( SP_DeclarePolicyMember, , SENF_SOCKET_POLICIES )
 #   undef SP_DeclarePolicyMember
 
         static void checkBaseOf(SocketPolicyBase const & other);
@@ -122,7 +107,7 @@ namespace impl {
     template <int N>
     struct SocketPolicy_rv
     { int v[N+1]; };
-    
+
     template <class Base, class Policy, int N>
     struct MakeSocketPolicy_merge
     {};
@@ -131,16 +116,16 @@ namespace impl {
         BOOST_PP_COMMA_IF( m )                                                  \
         BOOST_PP_IIF( BOOST_PP_EQUAL(n,m), Policy, typename Base::SomePolicy )
 
-#    define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_DEC( SATLIB_SOCKET_POLICIES_N ) )
-#    define BOOST_PP_LOCAL_MACRO(n)                                                                                             \
-        SocketPolicy_rv<n> MakeSocketPolicy_merge_(BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( n, SATLIB_SOCKET_POLICIES ),Base)*);        \
-                                                                                                                                \
-        template <class Base, class Policy>                                                                                     \
-        struct MakeSocketPolicy_merge<Base,Policy,sizeof(SocketPolicy_rv<n>)>                                                   \
-        {                                                                                                                       \
-            typedef SocketPolicy<                                                                                               \
-               BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareMakeSocketPolicy_merge_member, n, SATLIB_SOCKET_POLICIES )                    \
-               > type;                                                                                                          \
+#    define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_DEC( SENF_SOCKET_POLICIES_N ) )
+#    define BOOST_PP_LOCAL_MACRO(n)                                                                                     \
+        SocketPolicy_rv<n> MakeSocketPolicy_merge_(BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( n, SENF_SOCKET_POLICIES ),Base)*);  \
+                                                                                                                        \
+        template <class Base, class Policy>                                                                             \
+        struct MakeSocketPolicy_merge<Base,Policy,sizeof(SocketPolicy_rv<n>)>                                           \
+        {                                                                                                               \
+            typedef SocketPolicy<                                                                                       \
+               BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareMakeSocketPolicy_merge_member, n, SENF_SOCKET_POLICIES )              \
+               > type;                                                                                                  \
         };
 
 #   include BOOST_PP_LOCAL_ITERATE()
@@ -170,18 +155,17 @@ namespace impl {
     };
 
 #   define SP_DeclareArguments(x1,x2,n,SomePolicy)      \
-       BOOST_PP_COMMA_IF( n )                          \
-       typename Base::SomePolicy *
+        BOOST_PP_COMMA_IF( n )                          \
+        typename Base::SomePolicy *
 
     template <class Base>
     SocketPolicy_rv<1> SocketPolicy_checkcompat_(
-        BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareArguments, , SATLIB_SOCKET_POLICIES ) );
+        BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareArguments, , SENF_SOCKET_POLICIES ) );
 
 #   undef SP_DeclareArguments
 
     template <class Base>
-    SocketPolicy_rv<2> SocketPolicy_checkcompat_( 
-        BOOST_PP_ENUM_PARAMS( SATLIB_SOCKET_POLICIES_N, void * BOOST_PP_INTERCEPT ) );
+    SocketPolicy_rv<2> SocketPolicy_checkcompat_( ... );
 
     template <int Size>
     struct SocketPolicy_checkcompat
@@ -202,17 +186,17 @@ namespace impl {
     struct SocketPolicy_compatibility
         : public SocketPolicy_checkcompat< sizeof(
             SocketPolicy_checkcompat_<Base>(
-                BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareArguments, , SATLIB_SOCKET_POLICIES ) )) >
+                BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareArguments, , SENF_SOCKET_POLICIES ) )) >
     {};
 
 } // namespace impl
 
-    template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( SATLIB_SOCKET_POLICIES_N, class T, satcom::lib::impl::nil ) >
+    template < BOOST_PP_ENUM_PARAMS_WITH_A_DEFAULT( SENF_SOCKET_POLICIES_N, class T, senf::impl::nil ) >
     class MakeSocketPolicy
         : public boost::mpl::if_< boost::is_convertible< T0*, SocketPolicyBase* >,
-                                  impl::MakeSocketPolicy_impl< T0, boost::mpl::vector< BOOST_PP_ENUM_SHIFTED_PARAMS( SATLIB_SOCKET_POLICIES_N, T ) > >,
+                                  impl::MakeSocketPolicy_impl< T0, boost::mpl::vector< BOOST_PP_ENUM_SHIFTED_PARAMS( SENF_SOCKET_POLICIES_N, T ) > >,
                                   impl::MakeSocketPolicy_impl< SocketPolicy<>,
-                                                               boost::mpl::vector< BOOST_PP_ENUM_PARAMS( SATLIB_SOCKET_POLICIES_N, T ) > > >::type
+                                                               boost::mpl::vector< BOOST_PP_ENUM_PARAMS( SENF_SOCKET_POLICIES_N, T ) > > >::type
     {};
 
     template <class BasePolicy, class DerivedPolicy>
@@ -239,11 +223,13 @@ namespace impl {
             : public boost::enable_if_c< ! BOOST_PP_CAT(SomePolicy,Is)<Policy,Trait>::value >   \
         {};
 
-    BOOST_PP_SEQ_FOR_EACH( SP_DefineConditions, , SATLIB_SOCKET_POLICIES )
+    BOOST_PP_SEQ_FOR_EACH( SP_DefineConditions, , SENF_SOCKET_POLICIES )
 
 #   undef SP_DefineConditions
 
-}}
+}
+
+/// \endcond
 
 ///////////////////////////////ih.e////////////////////////////////////////
 #endif
@@ -251,5 +237,8 @@ namespace impl {
 \f
 // Local Variables:
 // mode: c++
-// c-file-style: "satcom"
+// fill-column: 100
+// c-file-style: "senf"
+// indent-tabs-mode: nil
+// ispell-local-dictionary: "american"
 // End: