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_cbks 5 #define tools_sg_cbks 6 7 // A dedicated container for callbacks. 8 9 #include "bcbk" 10 #include "../forit" 11 #include "../vmanip" 12 13 #include <vector> 14 15 namespace tools { 16 namespace sg { 17 18 class cbks { 19 public: 20 cbks() {} 21 virtual ~cbks(){clear();} 22 public: 23 cbks(const cbks& a_from){copy(a_from);} 24 cbks& operator=(const cbks& a_from){ 25 if(&a_from==this) return *this; 26 copy(a_from); 27 return *this; 28 } 29 public: 30 void add(bcbk* a_cbk) { 31 //we take ownership of a_cbk 32 m_cbks.push_back(a_cbk); 33 } 34 void copy(const cbks& a_from,bool a_clear = true) { 35 if(&a_from==this) return; 36 if(a_clear) clear(); 37 tools_vforcit(bcbk*,a_from.m_cbks,it) m_cbks.push_back((*it)->copy()); 38 } 39 void clear() { 40 safe_clear<bcbk>(m_cbks); 41 } 42 43 void do_actions() const { 44 // WARNING : dangerous. Used by offscreen apps. 45 tools_vforcit(bcbk*,m_cbks,it) (*it)->action(); 46 } 47 48 const std::vector<bcbk*>& callbacks() const {return m_cbks;} 49 std::vector<bcbk*>& callbacks() {return m_cbks;} 50 bool is_empty() const {return m_cbks.empty();} 51 protected: 52 std::vector<bcbk*> m_cbks; 53 }; 54 55 }} 56 57 #endif