g4tools  5.4.0
action
Go to the documentation of this file.
1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
2 // See the file tools.license for terms.
3 
4 #ifndef tools_sg_action
5 #define tools_sg_action
6 
7 #ifdef TOOLS_MEM
8 #include "../mem"
9 #endif
10 
11 #include "../S_STRING"
12 #include "../scast"
13 
14 #include <ostream>
15 
16 namespace tools {
17 namespace sg {
18 
19 class action {
20 public:
22 public:
23  virtual void* cast(const std::string& a_class) const {
24  if(void* p = cmp_cast<action>(this,a_class)) return p;
25  return 0;
26  }
27  virtual const std::string& s_cls() const = 0;
28 public:
29  action(std::ostream& a_out)
30  :m_out(a_out)
31  {
32 #ifdef TOOLS_MEM
33  mem::increment(s_class().c_str());
34 #endif
35  }
36  virtual ~action(){
37 #ifdef TOOLS_MEM
38  mem::decrement(s_class().c_str());
39 #endif
40  }
41 protected:
42  action(const action& a_from)
43  :m_out(a_from.m_out)
44  {
45 #ifdef TOOLS_MEM
46  mem::increment(s_class().c_str());
47 #endif
48  }
49  action& operator=(const action&){return *this;}
50 public:
51  std::ostream& out() const {return m_out;}
52  //void reset() {
53  //}
54 protected:
55  std::ostream& m_out;
56 };
57 
58 #include "../HEADER"
59 
60 #define TOOLS_ACTION(a__class,a__sclass,a__parent)\
61  TOOLS_HEADER(a__class,a__sclass,a__parent)\
62  virtual tools::sg::action* copy() const {return new a__class(*this);}
63 
64 #define TOOLS_ACTION_NO_COPY(a__class,a__sclass,a__parent)\
65  TOOLS_HEADER(a__class,a__sclass,a__parent)
66 
67 }}
68 
69 #endif
tools::sg::action::operator=
action & operator=(const action &)
Definition: action:49
tools::sg::action::s_cls
virtual const std::string & s_cls() const =0
tools::sg::action
Definition: action:19
tools::sg::action::~action
virtual ~action()
Definition: action:36
TOOLS_SCLASS
#define TOOLS_SCLASS(a_name)
Definition: S_STRING:41
tools::sg::action::m_out
std::ostream & m_out
Definition: action:55
tools::sg::action::cast
virtual void * cast(const std::string &a_class) const
Definition: action:23
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::sg::action::action
action(std::ostream &a_out)
Definition: action:29
tools::sg::action::out
std::ostream & out() const
Definition: action:51
tools::sg::action::action
action(const action &a_from)
Definition: action:42