X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FSocketPolicy.ih;h=0e2b58fd63b241d80570c149eb6e010496a09707;hb=245bdb920e5f8fc1150794db8d0b42a15fa2cd15;hp=dabdf26b67cb45954a02f938fd0b1acf92d66e36;hpb=62464586315edf52fbcc613acb4a8a7e919fd8e2;p=senf.git diff --git a/Socket/SocketPolicy.ih b/Socket/SocketPolicy.ih index dabdf26..0e2b58f 100644 --- a/Socket/SocketPolicy.ih +++ b/Socket/SocketPolicy.ih @@ -20,6 +20,10 @@ // 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 @@ -46,49 +50,32 @@ #include #include // for enable_if -#include "GenericSockAddr.hh" - ///////////////////////////////ih.p//////////////////////////////////////// -namespace senf { +/// \cond disabled +// Hide this code from doxygen +namespace senf { # define SENF_SOCKET_POLICIES_N BOOST_PP_SEQ_SIZE( SENF_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 ... - - struct AddressingPolicyBase - { - virtual ~ AddressingPolicyBase() {} - - typedef GenericSockAddr Address; - }; - -# 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( SENF_SOCKET_POLICIES ) ) + BOOST_PP_SEQ_FOR_EACH( SP_DeclareAlias, , SENF_SOCKET_POLICIES ) -# undef SP_DeclareBase +# undef SP_DeclareAlias 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, , SENF_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) \ @@ -130,15 +117,15 @@ namespace impl { BOOST_PP_IIF( BOOST_PP_EQUAL(n,m), Policy, typename Base::SomePolicy ) # define BOOST_PP_LOCAL_LIMITS (0, BOOST_PP_DEC( SENF_SOCKET_POLICIES_N ) ) -# define BOOST_PP_LOCAL_MACRO(n) \ - SocketPolicy_rv MakeSocketPolicy_merge_(BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( n, SENF_SOCKET_POLICIES ),Base)*); \ - \ - template \ - struct MakeSocketPolicy_merge)> \ - { \ - typedef SocketPolicy< \ - BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareMakeSocketPolicy_merge_member, n, SENF_SOCKET_POLICIES ) \ - > type; \ +# define BOOST_PP_LOCAL_MACRO(n) \ + SocketPolicy_rv MakeSocketPolicy_merge_(BOOST_PP_CAT( BOOST_PP_SEQ_ELEM( n, SENF_SOCKET_POLICIES ),Base)*); \ + \ + template \ + struct MakeSocketPolicy_merge)> \ + { \ + typedef SocketPolicy< \ + BOOST_PP_SEQ_FOR_EACH_I( SP_DeclareMakeSocketPolicy_merge_member, n, SENF_SOCKET_POLICIES ) \ + > type; \ }; # include BOOST_PP_LOCAL_ITERATE() @@ -178,8 +165,7 @@ namespace impl { # undef SP_DeclareArguments template - SocketPolicy_rv<2> SocketPolicy_checkcompat_( - BOOST_PP_ENUM_PARAMS( SENF_SOCKET_POLICIES_N, void * BOOST_PP_INTERCEPT ) ); + SocketPolicy_rv<2> SocketPolicy_checkcompat_( ... ); template struct SocketPolicy_checkcompat @@ -243,6 +229,8 @@ namespace impl { } +/// \endcond + ///////////////////////////////ih.e//////////////////////////////////////// #endif