]> Dogcows Code - chaz/homebank/blobdiff - src/ext-value.h
add plugin engine (supports C and Perl plugins)
[chaz/homebank] / src / ext-value.h
diff --git a/src/ext-value.h b/src/ext-value.h
new file mode 100644 (file)
index 0000000..a5002bb
--- /dev/null
@@ -0,0 +1,64 @@
+
+#ifndef __EXT_VALUE_H__
+#define __EXT_VALUE_H__
+
+#include "homebank.h"
+
+
+#define DA_TYPE_ACC         (da_acc_get_type())
+#define DA_TYPE_TRANSACTION (da_transaction_get_type())
+
+#define obj(_1, _2, _3, _4, PREFIX) GType PREFIX##get_type(void);
+#include "ext-value.h"
+#undef obj
+
+
+#define val(CTYPE, NAME, PART, GTYPE)                   \
+static inline GValue* EXT_##NAME(GValue* v, CTYPE c) {  \
+    g_value_init(v, GTYPE);                             \
+    g_value_set_##PART(v, c);                           \
+    return v;                                           \
+}
+#define obj(CTYPE, NAME, PART, GTYPE, _5) val(CTYPE*, NAME, PART, GTYPE)
+#include "ext-value.h"
+#undef val
+#undef obj
+
+
+const GValue* ext_value_undef(void);
+const GValue* ext_value_true(void);
+const GValue* ext_value_false(void);
+
+#define EXT_UNDEF (ext_value_undef())
+#define EXT_TRUE  (ext_value_true())
+#define EXT_FALSE (ext_value_false())
+
+GValue* EXT_LIST(GValue* v, ...);
+GValue* EXT_HASH(GValue* v, ...);
+GValue* EXT_JULIAN(GValue* v, guint32 d);
+
+
+#else
+
+#ifdef val
+// C type, name, fundamental, GType
+val(gboolean,       BOOLEAN,        boolean,    G_TYPE_BOOLEAN)
+val(gint,           INT,            int,        G_TYPE_INT)
+val(guint,          UINT,           uint,       G_TYPE_UINT)
+val(gdouble,        DOUBLE,         double,     G_TYPE_DOUBLE)
+val(gchar,          CHAR,           schar,      G_TYPE_CHAR)
+val(gchar*,         STRING,         string,     G_TYPE_STRING)
+val(GPtrArray*,     ARRAY,          boxed,      G_TYPE_PTR_ARRAY)
+val(GHashTable*,    HASH_TABLE,     boxed,      G_TYPE_HASH_TABLE)
+val(GDate*,         DATE,           boxed,      G_TYPE_DATE)
+val(void*,          OBJECT,         object,     G_TYPE_OBJECT)
+#endif
+
+#ifdef obj
+// C type, name, fundamental, GType, prefix
+obj(Account,        ACCOUNT,        pointer,    DA_TYPE_ACC,            da_acc_)
+obj(Transaction,    TRANSACTION,    pointer,    DA_TYPE_TRANSACTION,    da_transaction_)
+#endif
+
+#endif
+
This page took 0.020195 seconds and 4 git commands to generate.