Geant4 Cross Reference |
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: 21 TOOLS_SCLASS(tools::sg::action) 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