--- 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_ */