2 // Copyright (c) 2020 Fraunhofer Institute for Applied Information Technology (FIT)
3 // Network Research Group (NET)
4 // Schloss Birlinghoven, 53754 Sankt Augustin, GERMANY
5 // Contact: support@wiback.org
7 // This file is part of the SENF code tree.
8 // It is licensed under the 3-clause BSD License (aka New BSD License).
9 // See LICENSE.txt in the top level directory for details or visit
10 // https://opensource.org/licenses/BSD-3-Clause
15 \brief ProtocolClientSocketHandle Boost.Preprocessor external iteration include
18 #if !BOOST_PP_IS_ITERATING && !defined(MPP_ProtocolClientSocketHandle_)
19 #define MPP_ProtocolClientSocketHandle_ 1
22 #include <boost/preprocessor/iteration/iterate.hpp>
23 #include <boost/preprocessor/enum.hpp>
24 #include <boost/preprocessor/cat.hpp>
26 //-///////////////////////////mpp.p////////////////////////////////////////
27 #elif BOOST_PP_IS_ITERATING //-////////////////////////////////////////////
28 //-////////////////////////////////////////////////////////////////////////
31 #define mpp_Arg(z,n,data) BOOST_PP_CAT(A,n) const & BOOST_PP_CAT(a,n)
32 #define mpp_TemplateParameters() BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A )
33 #define mpp_MethodParameters() BOOST_PP_ENUM(BOOST_PP_ITERATION(), mpp_Arg, )
34 #define mpp_CallParameters() BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), a )
36 //-////////////////////////////////////////////////////////////////////////
37 #if BOOST_PP_ITERATION_FLAGS()==1 //-//////////////////////////////////////
38 //-////////////////////////////////////////////////////////////////////////
39 // senf::ProtocolClientSocketHandle<SocketProtocol>::
40 // ProtocolClientSocketHandle (constructor) declaration
42 template < mpp_TemplateParameters() >
43 explicit ProtocolClientSocketHandle( mpp_MethodParameters() );
45 //-////////////////////////////////////////////////////////////////////////
46 #elif BOOST_PP_ITERATION_FLAGS()==2 //-////////////////////////////////////
47 //-////////////////////////////////////////////////////////////////////////
48 // senf::ProtocolClientSocketHandle<SocketProtocol>::
49 // ProtocolClientSocketHandle (constructor) implementation
51 template <class SocketProtocol>
52 template < mpp_TemplateParameters() >
53 prefix_ senf::ProtocolClientSocketHandle<SocketProtocol>::
54 ProtocolClientSocketHandle( mpp_MethodParameters() )
55 : ClientSocketHandle<typename SocketProtocol::Policy>(
56 std::unique_ptr<senf::SocketBody>(new ProtocolSocketBody<SocketProtocol>(false)))
58 this->protocol().init_client( mpp_CallParameters() );
61 //-////////////////////////////////////////////////////////////////////////
62 #endif //-/////////////////////////////////////////////////////////////////
63 //-////////////////////////////////////////////////////////////////////////
64 // Undefine local Macros
67 #undef mpp_TemplateParameters
68 #undef mpp_MethodParameters
69 #undef mpp_CallParameters
71 //-////////////////////////////////////////////////////////////////////////
72 #endif //-/////////////////////////////////////////////////////////////////
73 //-///////////////////////////mpp.e////////////////////////////////////////
79 // c-file-style: "senf"
80 // indent-tabs-mode: nil
81 // ispell-local-dictionary: "american"
82 // compile-command: "scons -u test"