summaryrefslogtreecommitdiff
path: root/src/libmowgli/object
diff options
context:
space:
mode:
Diffstat (limited to 'src/libmowgli/object')
-rw-r--r--src/libmowgli/object/class.c59
-rw-r--r--src/libmowgli/object/class.h34
-rw-r--r--src/libmowgli/object/message.c68
-rw-r--r--src/libmowgli/object/message.h3
-rw-r--r--src/libmowgli/object/metadata.c36
-rw-r--r--src/libmowgli/object/metadata.h3
-rw-r--r--src/libmowgli/object/object.c18
-rw-r--r--src/libmowgli/object/object.h3
8 files changed, 110 insertions, 114 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)
{
diff --git a/src/libmowgli/object/class.h b/src/libmowgli/object/class.h
index 9612aa4..121368b 100644
--- a/src/libmowgli/object/class.h
+++ b/src/libmowgli/object/class.h
@@ -26,7 +26,8 @@
typedef void (*mowgli_destructor_t)(void *);
-typedef struct {
+typedef struct
+{
char *name;
mowgli_list_t derivitives;
mowgli_destructor_t destructor;
@@ -37,24 +38,25 @@ typedef struct {
extern void mowgli_object_class_init(mowgli_object_class_t *klass, const char *name, mowgli_destructor_t des, mowgli_boolean_t dynamic);
extern int mowgli_object_class_check_cast(mowgli_object_class_t *klass1, mowgli_object_class_t *klass2);
extern void mowgli_object_class_set_derivitive(mowgli_object_class_t *klass, mowgli_object_class_t *parent);
-extern void *mowgli_object_class_reinterpret_impl(/* mowgli_object_t */ void *object, mowgli_object_class_t *klass);
+extern void *mowgli_object_class_reinterpret_impl( /* mowgli_object_t */ void *object, mowgli_object_class_t *klass);
extern mowgli_object_class_t *mowgli_object_class_find_by_name(const char *name);
extern void mowgli_object_class_destroy(mowgli_object_class_t *klass);
-#define MOWGLI_REINTERPRET_CAST(object, klass) (klass *) mowgli_object_class_reinterpret_impl(object, mowgli_object_class_find_by_name( # klass ));
+#define MOWGLI_REINTERPRET_CAST(object, klass) (klass *) mowgli_object_class_reinterpret_impl(object, mowgli_object_class_find_by_name(#klass))
-#define mowgli_forced_cast(from_type, to_type, from, to)\
-do { \
- union cast_union \
- { \
- to_type out; \
- from_type in; \
- } u; \
- typedef int cant_use_union_cast[ \
- sizeof (from_type) == sizeof (u) \
- && sizeof (from_type) == sizeof (to_type) ? 1 : -1];\
- u.in = from; \
- to = u.out; \
-} while (0)
+#define mowgli_forced_cast(from_type, to_type, from, to) \
+ do \
+ { \
+ union cast_union \
+ { \
+ to_type out; \
+ from_type in; \
+ } u; \
+ typedef int cant_use_union_cast[ \
+ sizeof(from_type) == sizeof(u) \
+ && sizeof(from_type) == sizeof(to_type) ? 1 : -1]; \
+ u.in = from; \
+ to = u.out; \
+ } while (0)
#endif
diff --git a/src/libmowgli/object/message.c b/src/libmowgli/object/message.c
index e4328c8..d99f53b 100644
--- a/src/libmowgli/object/message.c
+++ b/src/libmowgli/object/message.c
@@ -23,71 +23,61 @@
#include "mowgli.h"
-void mowgli_object_class_message_handler_attach(mowgli_object_class_t *klass, mowgli_object_message_handler_t *sig)
+void
+mowgli_object_class_message_handler_attach(mowgli_object_class_t *klass, mowgli_object_message_handler_t *sig)
{
- if (klass == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_object_class_exception);
-
- if (sig == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_signal_exception);
+ return_if_fail(klass != NULL);
+ return_if_fail(sig != NULL);
mowgli_node_add(sig, mowgli_node_create(), &klass->message_handlers);
}
-void mowgli_object_class_message_handler_detach(mowgli_object_class_t *klass, mowgli_object_message_handler_t *sig)
+void
+mowgli_object_class_message_handler_detach(mowgli_object_class_t *klass, mowgli_object_message_handler_t *sig)
{
- mowgli_node_t *n;
+ return_if_fail(klass != NULL);
+ return_if_fail(sig != NULL);
- if (klass == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_object_class_exception);
-
- if (sig == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_signal_exception);
+ mowgli_node_t *n;
n = mowgli_node_find(sig, &klass->message_handlers);
mowgli_node_delete(n, &klass->message_handlers);
mowgli_node_free(n);
}
-void mowgli_object_message_handler_attach(mowgli_object_t *self, mowgli_object_message_handler_t *sig)
+void
+mowgli_object_message_handler_attach(mowgli_object_t *self, mowgli_object_message_handler_t *sig)
{
- if (self == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_object_exception);
-
- if (sig == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_signal_exception);
+ return_if_fail(self != NULL);
+ return_if_fail(sig != NULL);
mowgli_node_add(sig, mowgli_node_create(), &self->message_handlers);
}
-void mowgli_object_message_handler_detach(mowgli_object_t *self, mowgli_object_message_handler_t *sig)
+void
+mowgli_object_message_handler_detach(mowgli_object_t *self, mowgli_object_message_handler_t *sig)
{
- mowgli_node_t *n;
+ return_if_fail(self != NULL);
+ return_if_fail(sig != NULL);
- if (self == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_object_exception);
-
- if (sig == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_signal_exception);
+ mowgli_node_t *n;
n = mowgli_node_find(sig, &self->message_handlers);
mowgli_node_delete(n, &self->message_handlers);
mowgli_node_free(n);
}
-void mowgli_object_message_broadcast(mowgli_object_t *self, const char *name, ...)
+void
+mowgli_object_message_broadcast(mowgli_object_t *self, const char *name, ...)
{
+ return_if_fail(self != NULL);
+ return_if_fail(name != NULL);
+
mowgli_argstack_t *stack;
mowgli_object_message_handler_t *sig = NULL;
mowgli_node_t *n;
va_list va;
- if (self == NULL)
- mowgli_throw_exception(mowgli.object_messaging.invalid_object_exception);
-
- if (name == NULL)
- mowgli_throw_exception(mowgli.null_pointer_exception);
-
/* try to find a signal to compile the argument stack from, we start with self::klass first. */
MOWGLI_LIST_FOREACH(n, self->klass->message_handlers.head)
{
@@ -101,7 +91,6 @@ void mowgli_object_message_broadcast(mowgli_object_t *self, const char *name, ..
}
if (sig == NULL)
- {
MOWGLI_LIST_FOREACH(n, self->klass->message_handlers.head)
{
mowgli_object_message_handler_t *sig2 = (mowgli_object_message_handler_t *) n->data;
@@ -112,11 +101,10 @@ void mowgli_object_message_broadcast(mowgli_object_t *self, const char *name, ..
break;
}
}
- }
- /* return if no signals found, else compile the argstack */
- if (sig == NULL)
- return;
+ /* return if no signals found, else compile the argstack */
+ if (sig == NULL)
+ return;
va_start(va, name);
stack = mowgli_argstack_create_from_va_list(sig->descstr, va);
@@ -126,7 +114,7 @@ void mowgli_object_message_broadcast(mowgli_object_t *self, const char *name, ..
{
sig = (mowgli_object_message_handler_t *) n->data;
- if (!strcasecmp(sig->name, name) && sig->handler != NULL)
+ if (!strcasecmp(sig->name, name) && (sig->handler != NULL))
sig->handler(self, sig, stack);
}
@@ -134,7 +122,7 @@ void mowgli_object_message_broadcast(mowgli_object_t *self, const char *name, ..
{
sig = (mowgli_object_message_handler_t *) n->data;
- if (!strcasecmp(sig->name, name) && sig->handler != NULL)
+ if (!strcasecmp(sig->name, name) && (sig->handler != NULL))
sig->handler(self, sig, stack);
}
diff --git a/src/libmowgli/object/message.h b/src/libmowgli/object/message.h
index 4a49d00..aee82af 100644
--- a/src/libmowgli/object/message.h
+++ b/src/libmowgli/object/message.h
@@ -27,7 +27,8 @@
typedef struct mowgli_object_message_handler_ mowgli_object_message_handler_t;
typedef void (*mowgli_object_messaging_func_t)(mowgli_object_t *self, mowgli_object_message_handler_t *sig, mowgli_argstack_t *argstack);
-struct mowgli_object_message_handler_ {
+struct mowgli_object_message_handler_
+{
char *name;
char *descstr;
mowgli_object_messaging_func_t handler;
diff --git a/src/libmowgli/object/metadata.c b/src/libmowgli/object/metadata.c
index 742e0dc..307947e 100644
--- a/src/libmowgli/object/metadata.c
+++ b/src/libmowgli/object/metadata.c
@@ -23,17 +23,15 @@
#include "mowgli.h"
-void mowgli_object_metadata_associate(mowgli_object_t *self, const char *key, void *value)
+void
+mowgli_object_metadata_associate(mowgli_object_t *self, const char *key, void *value)
{
+ return_if_fail(self != NULL);
+ return_if_fail(key != NULL);
+
mowgli_object_metadata_entry_t *e = NULL;
mowgli_node_t *n;
- if (self == NULL)
- mowgli_throw_exception(mowgli.object_metadata.invalid_object_exception);
-
- if (key == NULL)
- mowgli_throw_exception(mowgli.null_pointer_exception);
-
MOWGLI_LIST_FOREACH(n, self->metadata.head)
{
e = (mowgli_object_metadata_entry_t *) n->data;
@@ -55,17 +53,15 @@ void mowgli_object_metadata_associate(mowgli_object_t *self, const char *key, vo
mowgli_node_add(e, mowgli_node_create(), &self->metadata);
}
-void mowgli_object_metadata_dissociate(mowgli_object_t *self, const char *key)
+void
+mowgli_object_metadata_dissociate(mowgli_object_t *self, const char *key)
{
+ return_if_fail(self != NULL);
+ return_if_fail(key != NULL);
+
mowgli_object_metadata_entry_t *e;
mowgli_node_t *n, *tn;
- if (self == NULL)
- mowgli_throw_exception(mowgli.object_metadata.invalid_object_exception);
-
- if (key == NULL)
- mowgli_throw_exception(mowgli.null_pointer_exception);
-
MOWGLI_LIST_FOREACH_SAFE(n, tn, self->metadata.head)
{
e = (mowgli_object_metadata_entry_t *) n->data;
@@ -81,17 +77,15 @@ void mowgli_object_metadata_dissociate(mowgli_object_t *self, const char *key)
}
}
-void *mowgli_object_metadata_retrieve(mowgli_object_t *self, const char *key)
+void *
+mowgli_object_metadata_retrieve(mowgli_object_t *self, const char *key)
{
+ return_null_if_fail(self != NULL);
+ return_null_if_fail(key != NULL);
+
mowgli_object_metadata_entry_t *e;
mowgli_node_t *n;
- if (self == NULL)
- mowgli_throw_exception_val(mowgli.object_metadata.invalid_object_exception, NULL);
-
- if (key == NULL)
- mowgli_throw_exception_val(mowgli.null_pointer_exception, NULL);
-
MOWGLI_LIST_FOREACH(n, self->metadata.head)
{
e = (mowgli_object_metadata_entry_t *) n->data;
diff --git a/src/libmowgli/object/metadata.h b/src/libmowgli/object/metadata.h
index 0cdda69..fe2170c 100644
--- a/src/libmowgli/object/metadata.h
+++ b/src/libmowgli/object/metadata.h
@@ -24,7 +24,8 @@
#ifndef __MOWGLI_OBJECT_METADATA_H__
#define __MOWGLI_OBJECT_METADATA_H__
-typedef struct {
+typedef struct
+{
char *name;
void *data;
} mowgli_object_metadata_entry_t;
diff --git a/src/libmowgli/object/object.c b/src/libmowgli/object/object.c
index 7b24ea7..04a218f 100644
--- a/src/libmowgli/object/object.c
+++ b/src/libmowgli/object/object.c
@@ -40,7 +40,8 @@
* Side Effects:
* - none
*/
-void mowgli_object_init(mowgli_object_t *obj, const char *name, mowgli_object_class_t *klass, mowgli_destructor_t des)
+void
+mowgli_object_init(mowgli_object_t *obj, const char *name, mowgli_object_class_t *klass, mowgli_destructor_t des)
{
return_if_fail(obj != NULL);
@@ -48,7 +49,9 @@ void mowgli_object_init(mowgli_object_t *obj, const char *name, mowgli_object_cl
obj->name = mowgli_strdup(name);
if (klass != NULL)
+ {
obj->klass = klass;
+ }
else
{
mowgli_object_class_t *tmp = mowgli_alloc(sizeof(mowgli_object_class_t));
@@ -85,8 +88,7 @@ void mowgli_object_init(mowgli_object_t *obj, const char *name, mowgli_object_cl
* - none
*/
void
-mowgli_object_init_from_class(mowgli_object_t *obj, const char *name,
- mowgli_object_class_t *klass)
+mowgli_object_init_from_class(mowgli_object_t *obj, const char *name, mowgli_object_class_t *klass)
{
return_if_fail(obj != NULL);
return_if_fail(klass != NULL);
@@ -108,7 +110,8 @@ mowgli_object_init_from_class(mowgli_object_t *obj, const char *name,
* Side Effects:
* - none
*/
-void * mowgli_object_ref(void *object)
+void *
+mowgli_object_ref(void *object)
{
return_val_if_fail(object != NULL, NULL);
@@ -131,7 +134,8 @@ void * mowgli_object_ref(void *object)
* Side Effects:
* - if the refcount is 0, the object is destroyed.
*/
-void mowgli_object_unref(void *object)
+void
+mowgli_object_unref(void *object)
{
mowgli_object_t *obj = mowgli_object(object);
@@ -159,6 +163,8 @@ void mowgli_object_unref(void *object)
free(obj);
}
else
- mowgli_throw_exception(mowgli.object.invalid_object_class_exception);
+ {
+ mowgli_log_warning("invalid object class");
+ }
}
}
diff --git a/src/libmowgli/object/object.h b/src/libmowgli/object/object.h
index 0f13ce1..255df10 100644
--- a/src/libmowgli/object/object.h
+++ b/src/libmowgli/object/object.h
@@ -24,7 +24,8 @@
#ifndef __MOWGLI_OBJECT_H__
#define __MOWGLI_OBJECT_H__
-typedef struct {
+typedef struct
+{
char *name;
int refcount;
mowgli_object_class_t *klass;