00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef ThePEG_LoopGuard_H
00010 #define ThePEG_LoopGuard_H
00011
00012
00013 namespace ThePEG {
00014
00026 template <typename ExceptionT = Exception,
00027 typename MessageT = const char *>
00028 class LoopGuard {
00029
00030 public:
00031
00037 LoopGuard(const MessageT & mess, long maxc = 1000000 )
00038 : count(0), maxCount(maxc), message(mess) {}
00039
00044 void operator()()
00045 {
00046 if ( ++count > maxCount ) throw ExceptionT(message);
00047 }
00048
00049 private:
00050
00054 long count;
00055
00059 long maxCount;
00060
00065 const MessageT & message;
00066
00067 private:
00068
00072 LoopGuard();
00073
00077 LoopGuard(const LoopGuard &);
00078
00079 };
00080
00081 }
00082
00083 #endif