]> code.delx.au - pulseaudio/blobdiff - src/pulsecore/object.c
remap: Change remapping function argument type from void to int16_t / float as approp...
[pulseaudio] / src / pulsecore / object.c
index e6ed53b2c7f8ae7b97e98cc7d4ca6c452431a7e4..bc1aaf7011b2cfd3e9bdc45649ed6012c8f8a012 100644 (file)
@@ -1,5 +1,3 @@
-/* $Id$ */
-
 /***
   This file is part of PulseAudio.
 
@@ -8,7 +6,7 @@
 
   PulseAudio is free software; you can redistribute it and/or modify
   it under the terms of the GNU Lesser General Public License as published
-  by the Free Software Foundation; either version 2 of the License,
+  by the Free Software Foundation; either version 2.1 of the License,
   or (at your option) any later version.
 
   PulseAudio is distributed in the hope that it will be useful, but
 
 #include "object.h"
 
-pa_object *pa_object_new_internal(size_t size, const char *type_name) {
+const char pa_object_type_id[] = "pa_object";
+
+pa_object *pa_object_new_internal(size_t size, const char *type_id, bool (*check_type)(const char *type_id)) {
     pa_object *o;
 
     pa_assert(size > sizeof(pa_object));
-    pa_assert(type_name);
+    pa_assert(type_id);
+
+    if (!check_type)
+        check_type = pa_object_check_type;
+
+    pa_assert(check_type(type_id));
+    pa_assert(check_type(pa_object_type_id));
 
-    o = pa_xmalloc(size);
+    o = pa_xmalloc0(size);
     PA_REFCNT_INIT(o);
-    o->type_name = type_name;
+    o->type_id = type_id;
     o->free = pa_object_free;
+    o->check_type = check_type;
 
     return o;
 }
 
 pa_object *pa_object_ref(pa_object *o) {
-    pa_assert(o);
-    pa_assert(PA_REFCNT_VALUE(o) >= 1);
+    pa_object_assert_ref(o);
 
     PA_REFCNT_INC(o);
     return o;
 }
 
 void pa_object_unref(pa_object *o) {
-    pa_assert(o);
-    pa_assert(PA_REFCNT_VALUE(o) >= 1);
+    pa_object_assert_ref(o);
 
     if (PA_REFCNT_DEC(o) <= 0) {
         pa_assert(o->free);
         o->free(o);
     }
 }
+
+bool pa_object_check_type(const char *type_id) {
+    pa_assert(type_id);
+
+    return type_id == pa_object_type_id;
+}