1 // ANNA - Anna is Not Nothingness Anymore //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
9 #ifndef anna_diameter_comm_ReceiverFactoryImpl_hpp
10 #define anna_diameter_comm_ReceiverFactoryImpl_hpp
12 #include <anna/comm/Receiver.hpp>
13 #include <anna/comm/ReceiverFactory.hpp>
14 #include <anna/core/util/Recycler.hpp>
26 Default implementation for receivers factory specific for diameter
28 \param R Reference data member (client session or server session)
29 \param T Receiver class instantiated by this factory. Must define empty constructor, #setReference setter and
30 a #className method returning class name as:
33 static const char* className () throw ();
36 template <typename R, typename T> class ReceiverFactoryImpl : public anna::comm::ReceiverFactory {
41 ReceiverFactoryImpl(R *reference) : anna::comm::ReceiverFactory(T::className()), a_reference(reference) {;}
45 anna::Recycler<T> a_receivers;
47 anna::comm::Receiver* do_create() throw() {
48 T *result = a_receivers.create();
49 result->setReference(a_reference);
53 void do_release(anna::comm::Receiver* receiver) throw() { a_receivers.release(static_cast <T*>(receiver)); }