Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/sg/states

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

  1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
  2 // See the file tools.license for terms.
  3 
  4 #ifndef tools_sg_states
  5 #define tools_sg_states
  6 
  7 #include "state"
  8 
  9 //#define TOOLS_SG_STATES_CUR
 10 
 11 namespace tools {
 12 namespace sg {
 13 
 14 class states {
 15 public:
 16 #ifdef TOOLS_SG_STATES_CUR
 17   states(unsigned int a_ww,unsigned int a_wh)
 18   :m_states(8)
 19   ,m_state(&(m_states[0]))
 20   ,m_cur_state(0)
 21   {
 22     m_state->m_ww = a_ww;
 23     m_state->m_wh = a_wh;
 24   }
 25 #else
 26   states(unsigned int a_ww,unsigned int a_wh):m_states() {
 27     m_state.m_ww = a_ww;
 28     m_state.m_wh = a_wh;
 29   }
 30 #endif
 31   virtual ~states(){}
 32 protected:
 33 #ifdef TOOLS_SG_STATES_CUR
 34   states(const states& a_from)
 35   :m_states(a_from.m_states)
 36   ,m_state(&(m_states[a_from.m_cur_state]))
 37   ,m_cur_state(a_from.m_cur_state)
 38   ,m_saved_state(a_from.m_saved_state)
 39   {}
 40   states& operator=(const states& a_from){
 41     m_states = a_from.m_states;
 42     m_state = &(m_states[a_from.m_cur_state]);
 43     m_cur_state = a_from.m_cur_state;
 44     m_saved_state = a_from.m_saved_state;
 45     return *this;
 46   }
 47 #else
 48   states(const states& a_from)
 49   :m_states(a_from.m_states)
 50   ,m_state(a_from.m_state)
 51   ,m_saved_state(a_from.m_saved_state)
 52   {}
 53   states& operator=(const states& a_from){
 54     m_states = a_from.m_states;
 55     m_state = a_from.m_state;
 56     m_saved_state = a_from.m_saved_state;
 57     return *this;
 58   }
 59 #endif
 60 public:
 61 #ifdef TOOLS_SG_STATES_CUR
 62   const sg::state& state() const {return *m_state;}
 63   sg::state& state() {return *m_state;}
 64   void pop_state() {
 65     m_state = &(m_states[m_cur_state]);
 66     m_cur_state--;
 67   }
 68   void push_state() {
 69     if((m_cur_state+1)>=(int)m_states.size()) {
 70       m_states.resize(m_states.size()+5);
 71     }
 72     m_cur_state++;
 73     m_states[m_cur_state] = *m_state;
 74   }
 75 #else
 76   const sg::state& state() const {return m_state;}
 77   sg::state& state() {return m_state;}
 78   void pop_state() {
 79     //if(!m_states.size()) return; //throw.
 80     m_state = m_states.back();
 81     m_states.pop_back();
 82   }
 83   void push_state() {m_states.push_back(m_state);}
 84 #endif
 85 
 86   void save_state(const sg::state& a_state) {m_saved_state = a_state;}
 87   const sg::state& saved_state() const {return m_saved_state;}
 88   sg::state& saved_state() {return m_saved_state;}
 89 protected:
 90   std::vector<sg::state> m_states;
 91 #ifdef TOOLS_SG_STATES_CUR
 92   sg::state* m_state;
 93   int m_cur_state;
 94 #else
 95   sg::state m_state;
 96 #endif
 97   sg::state m_saved_state;
 98 };
 99 
100 }}
101 
102 #endif