summaryrefslogtreecommitdiff
path: root/src/libmowgli/object/class.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmowgli/object/class.c')
-rw-r--r--src/libmowgli/object/class.c59
1 files changed, 31 insertions, 28 deletions
diff --git a/src/libmowgli/object/class.c b/src/libmowgli/object/class.c
index 9bddf79..627b59d 100644
--- a/src/libmowgli/object/class.c
+++ b/src/libmowgli/object/class.c
@@ -23,9 +23,10 @@
#include "mowgli.h"
-static mowgli_patricia_t *mowgli_object_class_dict = NULL;
+static mowgli_patricia_t *mowgli_object_class_dict;
-static void _object_key_canon(char *str)
+static void
+_object_key_canon(char *str)
{
while (*str)
{
@@ -34,17 +35,17 @@ static void _object_key_canon(char *str)
}
}
-void mowgli_object_class_init(mowgli_object_class_t *klass, const char *name, mowgli_destructor_t des, mowgli_boolean_t dynamic)
+void
+mowgli_object_class_bootstrap()
{
- /* if the object_class dictionary has not yet been initialized, we will want to do that. */
- if (mowgli_object_class_dict == NULL)
- mowgli_object_class_dict = mowgli_patricia_create(_object_key_canon);
-
- if (klass == NULL)
- mowgli_throw_exception_fatal(mowgli.object_class.invalid_object_class_exception);
+ mowgli_object_class_dict = mowgli_patricia_create(_object_key_canon);
+}
- if (mowgli_object_class_find_by_name(name) != NULL)
- mowgli_throw_exception_fatal(mowgli.object_class.duplicate_object_class_exception);
+void
+mowgli_object_class_init(mowgli_object_class_t *klass, const char *name, mowgli_destructor_t des, mowgli_boolean_t dynamic)
+{
+ return_if_fail(klass != NULL);
+ return_if_fail(mowgli_object_class_find_by_name(name) == NULL);
/* initialize object_class::name */
klass->name = mowgli_strdup(name);
@@ -64,12 +65,13 @@ void mowgli_object_class_init(mowgli_object_class_t *klass, const char *name, mo
mowgli_patricia_add(mowgli_object_class_dict, klass->name, klass);
}
-int mowgli_object_class_check_cast(mowgli_object_class_t *klass1, mowgli_object_class_t *klass2)
+int
+mowgli_object_class_check_cast(mowgli_object_class_t *klass1, mowgli_object_class_t *klass2)
{
- mowgli_node_t *n;
+ return_val_if_fail(klass1 != NULL, 0);
+ return_val_if_fail(klass2 != NULL, 0);
- if (klass1 == NULL || klass2 == NULL)
- mowgli_throw_exception_val(mowgli.object_class.invalid_object_class_exception, 0);
+ mowgli_node_t *n;
MOWGLI_LIST_FOREACH(n, klass1->derivitives.head)
{
@@ -82,15 +84,17 @@ int mowgli_object_class_check_cast(mowgli_object_class_t *klass1, mowgli_object_
return 0;
}
-void mowgli_object_class_set_derivitive(mowgli_object_class_t *klass, mowgli_object_class_t *parent)
+void
+mowgli_object_class_set_derivitive(mowgli_object_class_t *klass, mowgli_object_class_t *parent)
{
- if (klass == NULL || parent == NULL)
- mowgli_throw_exception_fatal(mowgli.object_class.invalid_object_class_exception);
+ return_if_fail(klass != NULL);
+ return_if_fail(parent != NULL);
mowgli_node_add(klass, mowgli_node_create(), &parent->derivitives);
}
-void *mowgli_object_class_reinterpret_impl(/* mowgli_object_t */ void *opdata, mowgli_object_class_t *klass)
+void *
+mowgli_object_class_reinterpret_impl( /* mowgli_object_t */ void *opdata, mowgli_object_class_t *klass)
{
mowgli_object_t *object = mowgli_object(opdata);
@@ -101,24 +105,23 @@ void *mowgli_object_class_reinterpret_impl(/* mowgli_object_t */ void *opdata, m
if (mowgli_object_class_check_cast(object->klass, klass))
return object;
- mowgli_log("Invalid reinterpreted cast from %s<%p> to %s", object->klass->name, klass->name);
+ mowgli_log("Invalid reinterpreted cast from %s<%p> to %s", object->klass->name, (void *) object, klass->name);
return NULL;
}
-mowgli_object_class_t *mowgli_object_class_find_by_name(const char *name)
+mowgli_object_class_t *
+mowgli_object_class_find_by_name(const char *name)
{
return mowgli_patricia_retrieve(mowgli_object_class_dict, name);
}
-void mowgli_object_class_destroy(mowgli_object_class_t *klass)
+void
+mowgli_object_class_destroy(mowgli_object_class_t *klass)
{
- mowgli_node_t *n, *tn;
+ return_if_fail(klass != NULL);
+ return_if_fail(klass->dynamic == TRUE);
- if (klass == NULL)
- mowgli_throw_exception_fatal(mowgli.object_class.invalid_object_class_exception);
-
- if (klass->dynamic != TRUE)
- mowgli_throw_exception_fatal(mowgli.object_class.nondynamic_object_class_exception);
+ mowgli_node_t *n, *tn;
MOWGLI_LIST_FOREACH_SAFE(n, tn, klass->derivitives.head)
{