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