]> Dogcows Code - chaz/homebank/blobdiff - src/ext-value.c
add plugin engine (supports C and Perl plugins)
[chaz/homebank] / src / ext-value.c
diff --git a/src/ext-value.c b/src/ext-value.c
new file mode 100644 (file)
index 0000000..47c4829
--- /dev/null
@@ -0,0 +1,82 @@
+
+#include <stdarg.h>
+
+#include "ext-value.h"
+
+
+const GValue* ext_value_undef()
+{
+       static GValue v = G_VALUE_INIT;
+       return &v;
+}
+
+const GValue* ext_value_true()
+{
+       static GValue v = G_VALUE_INIT;
+       if (!G_VALUE_HOLDS_BOOLEAN(&v)) EXT_BOOLEAN(&v, TRUE);
+       return &v;
+}
+
+const GValue* ext_value_false()
+{
+       static GValue v = G_VALUE_INIT;
+       if (!G_VALUE_HOLDS_BOOLEAN(&v)) EXT_BOOLEAN(&v, FALSE);
+       return &v;
+}
+
+
+GValue* EXT_LIST(GValue* v, ...)
+{
+       GPtrArray* a = g_ptr_array_new();
+
+       va_list ap;
+       va_start(ap, v);
+
+       for (;;) {
+               GValue* item = (GValue*)va_arg(ap, GValue*);
+               if (!item) break;
+               g_ptr_array_add(a, item);
+       }
+
+       va_end(ap);
+
+       return EXT_ARRAY(v, a);
+}
+
+GValue* EXT_HASH(GValue* v, ...)
+{
+       GHashTable* h = g_hash_table_new(g_str_hash, g_str_equal);
+
+       va_list ap;
+       va_start(ap, v);
+
+       for (;;) {
+               gchar* key = (gchar*)va_arg(ap, gchar*);
+               if (!key) break;
+               GValue* val = (GValue*)va_arg(ap, GValue*);
+               g_hash_table_insert(h, key, val);
+       }
+
+       va_end(ap);
+
+       return EXT_HASH_TABLE(v, h);
+}
+
+GValue* EXT_JULIAN(GValue* v, guint32 d)
+{
+       GDate* date = g_date_new_julian(d);
+       return EXT_DATE(v, date);
+}
+
+
+#define obj(CTYPE, _2, _3, _4, PREFIX)                  \
+GType PREFIX##get_type()                                \
+{                                                       \
+       static GType type = 0;                              \
+       if (type == 0)                                      \
+               type = g_pointer_type_register_static(#CTYPE);  \
+       return type;                                        \
+}
+#include "ext-value.h"
+#undef obj
+
This page took 0.021684 seconds and 4 git commands to generate.