X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=Socket%2FSocketPolicy.hh;h=78311f14fa621893448fe781f4c67974f4e95712;hb=25d1f561a4f5096d026934b7286dd6efa5377402;hp=507eafdf6e1c8828730503cd9ee42e3ec6221bbb;hpb=e069f918a83434f6f6fe6656013340f2ec2492c4;p=senf.git diff --git a/Socket/SocketPolicy.hh b/Socket/SocketPolicy.hh index 507eafd..78311f1 100644 --- a/Socket/SocketPolicy.hh +++ b/Socket/SocketPolicy.hh @@ -221,9 +221,9 @@ template). \see \ref extend_policy \n - The Boost enable_if utility \n - The Boost.MPL library \n - The Boost.Preprocessor library + The Boost enable_if utility \n + The Boost.MPL library \n + The Boost.Preprocessor library \idea We could combine all the \e Axis \c Is templates into a single template. Since the \e trait argument will automatically specify the axis to be used, it is not necessary to specify @@ -234,9 +234,8 @@ /** \defgroup policy_impl_group Policy Implementation classes \ingroup policy_group - Here you will find all policy classes. Also included are some - supporting classes which are used as base classes to build other - policy classes. + Here you will find all policy classes. Also included are some supporting classes which are used + as base classes to build other policy classes. */ #ifndef HH_SocketPolicy_ @@ -261,11 +260,9 @@ namespace senf { \internal - This define symbol is used to configure the policy axis. The - base class for each of these axis must be defined explicitly - (e.g. AddressingPolicyBase). The implementation files will - then automatically generate all the other classes from this - list. + This define symbol is used to configure the policy axis. The base class for each of these + axis must be defined explicitly (e.g. AddressingPolicyBase). The implementation files will + then automatically generate all the other classes from this list. \see policy_group */ @@ -284,9 +281,8 @@ namespace senf { /** \brief Policy defining socket addressing - AddressingPolicyBase is the baseclass of all addressing policy - classes. When defining a new addressing policy, the following - members can be defined. All methods must be static. + AddressingPolicyBase is the baseclass of all addressing policy classes. When defining a new + addressing policy, the following members can be defined. All methods must be static. @@ -307,12 +303,11 @@ namespace senf { /** \brief Policy defining the framing format - This policy does not define any operations since it does have - no influence on any method signature. It does however affect - the semantics of the \c read() and \c write() operations. + This policy does not define any operations since it does have no influence on any method + signature. It does however affect the semantics of the \c read() and \c write() operations. - \note This policy axis probably only has two sensible statess: - StreamFramingPolicy and DatagramFramingPolicy. + \note This policy axis probably only has two sensible statess: StreamFramingPolicy and + DatagramFramingPolicy. \see policy_group */ @@ -330,18 +325,15 @@ namespace senf {
typedef Address Address type
method int accept(FileHandle, Address &) Accept a new connection
- The \c listen member is straight forward. The \c accept() member - must return a new file descriptor (which will be used to - create a new SocketHandle of the correct type). Additionally, - accept() should only be defined, if the Addressing policy is - not \c NoAddressingPolicy (which together with - ConnectedCommunicationPolicy would identify a point-to-point - link with fixed communication partners). + The \c listen member is straight forward. The \c accept() member must return a new file + descriptor (which will be used to create a new SocketHandle of the correct + type). Additionally, accept() should only be defined, if the Addressing policy is not \c + NoAddressingPolicy (which together with ConnectedCommunicationPolicy would identify a + point-to-point link with fixed communication partners). - \note This Policy only has two meaningful states: - ConnectedCommunicationPolicy and - UnconnectedCommunicationPolicy. It is probably not sensible to - define a new CommunicationPolicy type. + \note This Policy only has two meaningful states: ConnectedCommunicationPolicy and + UnconnectedCommunicationPolicy. It is probably not sensible to define a new + CommunicationPolicy type. \see policy_group */ @@ -352,22 +344,19 @@ namespace senf { /** \brief Policy defining the readability - The ReadPolicy defines, wether the socket is readable. It - may define two members: + The ReadPolicy defines, wether the socket is readable. It may define two members:
method unsigned read(FileHandle, char * buffer, unsigned size) read data from socket
method unsigned readfrom(FileHandle, char * buffer, unsigned size, Address &) read data from unconnected socket
- The second member should only be enabled if the communication - policy is UnconnectedCommunication (otherwise it does not make - sense since the communication partner is fixed) (see - AddressingPolicyBase on how to do this). + The second member should only be enabled if the communication policy is + UnconnectedCommunication (otherwise it does not make sense since the communication partner + is fixed) (see AddressingPolicyBase on how to do this). - \note This Policy only has two meaningful states: - ReadablePolicy and NotReadablePolicy. It probably does not - make sense to define new read policy types. + \note This Policy only has two meaningful states: ReadablePolicy and NotReadablePolicy. It + probably does not make sense to define new read policy types. \see policy_group */ @@ -378,22 +367,19 @@ namespace senf { /** \brief Policy defining the writability - The WritePolicy defines, wether the socket is writable. It may - define two members: + The WritePolicy defines, wether the socket is writable. It may define two members:
method unsigned write(FileHandle, char * buffer, unsigned size) read data from socket
method unsigned writeto(FileHandle, char * buffer, unsigned size, Address &) read data from unconnected socket
- The second member should only be enabled if the communication - policy is UnconnectedCommunication (otherwise it does not make - sense since the communication partner is fixed) (see - AddressingPolicyBase on how to do this). + The second member should only be enabled if the communication policy is + UnconnectedCommunication (otherwise it does not make sense since the communication partner + is fixed) (see AddressingPolicyBase on how to do this). - \note This Policy only has two meaningful states: - WritablePolicy and NotWritablePolicy. It probably does not - make sense to define new write policy types. + \note This Policy only has two meaningful states: WritablePolicy and NotWritablePolicy. It + probably does not make sense to define new write policy types. \see policy_group */ @@ -404,8 +390,8 @@ namespace senf { /** \brief Policy defining the buffering interface - The BufferingPolicy defines the buffer handling of the - socket. It may provide the follogin members: + The BufferingPolicy defines the buffer handling of the socket. It may provide the follogin + members: \see policy_group */ @@ -441,11 +427,9 @@ namespace senf { /** \brief Check single policy axis - This template is an example of the \e Axis \c Is family of - tempalte metafunctions. It will check, wether \c Trait is a - valid compatible Policy class of \c SocketPolicy. \c Trait - must be derived from AddressingPolicyBase (respectively \i - Policy \c Base). + This template is an example of the \e Axis \c Is family of tempalte metafunctions. It will + check, wether \c Trait is a valid compatible Policy class of \c SocketPolicy. \c Trait must + be derived from AddressingPolicyBase (respectively \i Policy \c Base). \see \ref policy_group */ @@ -455,12 +439,10 @@ namespace senf { /** \brief Enable template overload depending on policy value - This template is an exmaple of the \c If \e Axis \c Is - family of templates. It is used like Boost.enable_if - to enable a templated overload only, if the AddressingPolicy - of \e Axis is compatible with \c Trait (that is the - AddressingPolicy of \c Policy is derived from \c Trait). + This template is an exmaple of the \c If \e Axis \c Is family of templates. It is used like + Boost.enable_if to enable a + templated overload only, if the AddressingPolicy of \e Axis is compatible with \c Trait + (that is the AddressingPolicy of \c Policy is derived from \c Trait). \see policy_group */ @@ -479,12 +461,9 @@ namespace senf { \internal - This class provides the baseclass of all socket policies - (bundles). It serves two purposes: - \li It allows us to easily identify a socket policy bundle by - checking a classes baseclass. - \li It provides an abstract (virtual) interface to access the - policy axes + This class provides the baseclass of all socket policies (bundles). It serves two purposes: + \li It allows us to easily identify a socket policy bundle by checking a classes baseclass. + \li It provides an abstract (virtual) interface to access the policy axes \see policy_group */ @@ -492,9 +471,8 @@ namespace senf { { /** \brief Polymorphic access to policy axes - This is an example of a policy axes accessor. It returns a - reference to the policy axes used by the conrecte protocol - bundle. This reference can then be checked using RTTI + This is an example of a policy axes accessor. It returns a reference to the policy axes + used by the conrecte protocol bundle. This reference can then be checked using RTTI information. */ AddressingPolicyBase const & theAddressingPolicy() const = 0; @@ -502,19 +480,15 @@ namespace senf { /** \brief Collection of policy classes - The SocketPolicy template defines the complete Policy used by - the socket library. It contains one policy class for each - policy axis. This template takes one policy from each axis as - it's template arguments (this example implementation only has - AddressingPolicy as an argument). + The SocketPolicy template defines the complete Policy used by the socket library. It + contains one policy class for each policy axis. This template takes one policy from each + axis as it's template arguments (this example implementation only has AddressingPolicy as an + argument). - A SocketPolicy can be complete or incomplete. An incomplete - SocketPolicy will have at least one axis set to \c Undefined - \e Axis (or a generic derived class which is used to group - some other policies but does not (completely) define the - policy behavior). A complete SocketPolicy will have a - concrete definition of the desired behavior for each policy - axis. + A SocketPolicy can be complete or incomplete. An incomplete SocketPolicy will have at least + one axis set to \c Undefined \e Axis (or a generic derived class which is used to group some + other policies but does not (completely) define the policy behavior). A complete + SocketPolicy will have a concrete definition of the desired behavior for each policy axis. \see policy_group */ @@ -523,27 +497,23 @@ namespace senf { { /** \brief Check dynamic policy compatibility - This method will check the socket policy \a other against - this policy. It will check, wether \a other is a base - policy (or the same) of this policy. This check is done - against the \e dynamic type of \a other using RTTI. It - will throw \c std::bad_cast, if the policy is not - compatible. + This method will check the socket policy \a other against this policy. It will check, + wether \a other is a base policy (or the same) of this policy. This check is done + against the \e dynamic type of \a other using RTTI. It will throw \c std::bad_cast, if + the policy is not compatible. \param[in] other SocketPolicy to check - \throws std::bad_cast if \a other is not a compatible - policy + \throws std::bad_cast if \a other is not a compatible policy */ static void checkBaseOf(SocketPolicyBase const & other); }; /** \brief Metafunction to create SocketPolicy - This template metafunction simplifies the creation of a - SocketPolicy instantiation. It takes any number (that is up to - 6) of Policy classes as arguments in any Order. It will create - a SocketPolicy from these policy classes. Any axis not - specified will be left as \c Unspecified \e Axis. + This template metafunction simplifies the creation of a SocketPolicy instantiation. It takes + any number (that is up to 6) of Policy classes as arguments in any Order. It will create a + SocketPolicy from these policy classes. Any axis not specified will be left as \c + Unspecified \e Axis. \see policy_group */ @@ -553,16 +523,13 @@ namespace senf { /** \brief Check policy compatibility - This tempalte metafunction checks, wether the SocketPolicy \c - Derived is more specialized than \c Base (and therefore a - SocketHandle with policy \c Derived is convertible to a + This tempalte metafunction checks, wether the SocketPolicy \c Derived is more specialized + than \c Base (and therefore a SocketHandle with policy \c Derived is convertible to a SocketHandle with policy \c Base). - The metafunction will return true (that is inherits from \c - boost::true_type, see the Boost.MPL - library documentation for more information) if each policy - class in \c Base is a baseclass of (or the same as) the + The metafunction will return true (that is inherits from \c boost::true_type, see the Boost.MPL library documentation for + more information) if each policy class in \c Base is a baseclass of (or the same as) the corresponding policy class in \c Derived. \see policy_group