bug in RC
[anna.git] / include / anna / diameter / codec / Engine.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
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 //
7
8
9 #ifndef anna_diameter_codec_Engine_hpp
10 #define anna_diameter_codec_Engine_hpp
11
12
13 // STL
14 #include <string>
15
16 #include <anna/core/util/Recycler.hpp>
17
18 #include <anna/diameter/codec/Message.hpp>
19 #include <anna/diameter/codec/Avp.hpp>
20 #include <anna/diameter/codec/EngineImpl.hpp>
21
22
23 using namespace anna::diameter::codec;
24
25
26 //------------------------------------------------------------------------------
27 //---------------------------------------------------------------------- #define
28 //------------------------------------------------------------------------------
29
30
31 namespace anna {
32
33 namespace diameter {
34
35 namespace codec {
36
37
38
39 /**
40  * Standard inheritance for engine component implementation, allocating basic Avp and Message classes.
41  */
42 class Engine : public EngineImpl {
43
44 public:
45
46   /**
47      Constructor
48      @param className Logical name for the class.
49   */
50   Engine(const char *className, const stack::Dictionary * dictionary) : EngineImpl(className, dictionary) {;}
51
52   void releaseAvp(Avp* avp) throw() {
53     if(avp == NULL) return;
54
55     //Avp* aux = static_cast <Avp*> (avp);
56 //        avp/*aux*/->clear(); // free internal data-part storage specially for grouped avps which will release its childrens
57     a_avps.release(avp/*aux*/);
58   }
59
60   void releaseMessage(Message* message) throw() {
61     if(message == NULL) return;
62
63     //Message* aux = static_cast <Message*> (message);
64 //        message/*aux*/->clear(); // free internal data-part storage specially for childrens releasing
65     a_messages.release(message/*aux*/);
66   }
67
68 protected:
69
70   anna::Recycler<Avp> a_avps;
71   anna::Recycler<Message> a_messages;
72
73   anna::diameter::codec::Avp* allocateAvp() throw() { return a_avps.create(); }
74   anna::diameter::codec::Message* allocateMessage() throw() { return a_messages.create(); }
75
76   friend class Message;
77   friend class Avp;
78 };
79
80 }
81 }
82 }
83
84 #endif
85