project_files/frontlib/util/refcounter.h
changeset 7271 5608ac657362
parent 7230 240620f46dd7
child 7314 6171f0bad318
--- a/project_files/frontlib/util/refcounter.h	Thu Jun 21 21:32:12 2012 +0200
+++ b/project_files/frontlib/util/refcounter.h	Mon Jun 25 00:42:07 2012 +0200
@@ -11,41 +11,20 @@
 #ifndef REFCOUNTER_H_
 #define REFCOUNTER_H_
 
-#include "logging.h"
 #include <stdbool.h>
 
-static inline void flib_retain(int *referenceCountPtr, const char *objName) {
-	if(!referenceCountPtr || !objName) {
-		flib_log_e("null parameter to flib_retain");
-	} else {
-		if((*referenceCountPtr)  >= 0) {
-			(*referenceCountPtr)++;
-			flib_log_d("retaining %s, now %i references", objName, (*referenceCountPtr));
-		}
-		if((*referenceCountPtr) < 0) {
-			flib_log_e("Memory leak: Reference count overflow in %s object!", objName);
-		}
-	}
-}
-
 /**
- * Returns true if the struct should be freed.
+ * Pass a pointer to the counter variable to be incremented, and the name of the
+ * object for logging purposes. On overflow an error will be logged and the
+ * counter will get "stuck" so neither retain nor release will modify it anymore.
  */
-static inline bool flib_release(int *referenceCountPtr, const char *objName) {
-	bool result = false;
-	if(!referenceCountPtr) {
-		flib_log_e("null parameter to flib_release");
-	} else if((*referenceCountPtr) > 0) {
-		if(--(*referenceCountPtr) == 0) {
-			flib_log_d("releasing and destroying %s", objName);
-			result = true;
-		} else {
-			flib_log_d("releasing %s, now %i references", objName, (*referenceCountPtr));
-		}
-	} else if((*referenceCountPtr) == 0) {
-		flib_log_e("Attempt to release a %s with zero references!", objName);
-	}
-	return result;
-}
+void flib_retain(int *referenceCountPtr, const char *objName);
+
+/**
+ * Pass a pointer to the counter variable to be decremented and the name
+ * of the object for logging purposes.
+ * Returns true if the object should be freed.
+ */
+bool flib_release(int *referenceCountPtr, const char *objName);
 
 #endif /* REFCOUNTER_H_ */