summaryrefslogtreecommitdiffstats
path: root/languages/cpp/safetycounter.h
diff options
context:
space:
mode:
Diffstat (limited to 'languages/cpp/safetycounter.h')
-rw-r--r--languages/cpp/safetycounter.h59
1 files changed, 59 insertions, 0 deletions
diff --git a/languages/cpp/safetycounter.h b/languages/cpp/safetycounter.h
new file mode 100644
index 00000000..d4333176
--- /dev/null
+++ b/languages/cpp/safetycounter.h
@@ -0,0 +1,59 @@
+
+/***************************************************************************
+ copyright : (C) 2006 by David Nolden
+***************************************************************************/
+
+/***************************************************************************
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ ***************************************************************************/
+
+#ifndef __SAFETYCOUNTER_H__
+#define __SAFETYCOUNTER_H__
+
+#include <kdebug.h>
+
+struct SafetyCounter {
+ int safetyCounter;
+ const int maxSafetyCounter;
+
+ SafetyCounter( int max = 40000 ) : safetyCounter(0), maxSafetyCounter(max) {
+ }
+
+ void init() {
+ safetyCounter = 0;
+ }
+
+ SafetyCounter& operator ++() {
+ safetyCounter++;
+ return *this;
+ }
+
+ ///Returns whether the counter is ok, but without increasing it
+ bool ok() const {
+ return safetyCounter < maxSafetyCounter;
+ }
+
+ operator bool() {
+ safetyCounter++;
+ bool ret = safetyCounter < maxSafetyCounter;
+ if( !ret ) {
+ if( safetyCounter == maxSafetyCounter ) {
+#ifdef DEPTHBACKTRACE
+ kdDebug( 9007) << "WARNING: Safety-counter reached count > " << maxSafetyCounter << ", operation stopped" << endl;
+#endif
+ kdDebug( 9007 ) << endl << kdBacktrace() << endl;
+ }
+ }
+
+ return ret;
+ }
+
+};
+
+#endif