diff options
Diffstat (limited to 'src/libmowgli/object/class.c')
-rw-r--r-- | src/libmowgli/object/class.c | 59 |
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) { |