ThePEG  1.8.0
HoldFlag.h
1 // -*- C++ -*-
2 //
3 // HoldFlag.h is a part of ThePEG - Toolkit for HEP Event Generation
4 // Copyright (C) 1999-2011 Leif Lonnblad
5 //
6 // ThePEG is licenced under version 2 of the GPL, see COPYING for details.
7 // Please respect the MCnet academic guidelines, see GUIDELINES for details.
8 //
9 #ifndef ThePEG_HoldFlag_H
10 #define ThePEG_HoldFlag_H
11 // This is the declaration of the HoldFlag class.
12 
13 namespace ThePEG {
14 
15 template <typename T = bool>
23 class HoldFlag {
24 
25 public:
26 
32  HoldFlag(T & newFlag, const T & holdFlag)
33  : theFlag(newFlag), oldFlag(holdFlag) { std::swap(theFlag, oldFlag); }
34 
42  HoldFlag(T & newFlag, const T & holdFlag, const T & finalFlag)
43  : theFlag(newFlag), oldFlag(holdFlag)
44  {
45  std::swap(theFlag, oldFlag);
46  oldFlag = finalFlag;
47  }
48 
53  ~HoldFlag() { std::swap(theFlag, oldFlag); }
54 
55 private:
56 
60  T & theFlag;
61 
66 
70  HoldFlag();
71 
75  HoldFlag(const HoldFlag &);
76 
80  HoldFlag & operator=(const HoldFlag &);
81 
82 };
83 
87 template <>
88 class HoldFlag<bool> {
89 
90 public:
91 
97  HoldFlag(bool & newFlag, bool holdFlag = true)
98  : theFlag(newFlag), oldFlag(newFlag) { theFlag = holdFlag; }
99 
107  HoldFlag(bool & newFlag, bool holdFlag, bool finalFlag)
108  : theFlag(newFlag), oldFlag(finalFlag) { theFlag = holdFlag; }
109 
115 
116 private:
117 
121  bool & theFlag;
122 
126  bool oldFlag;
127 
131  HoldFlag();
132 
136  HoldFlag(const HoldFlag &);
137 
141  HoldFlag & operator=(const HoldFlag &);
142 
143 };
144 
145 }
146 
147 #endif /* ThePEG_HoldFlag_H */