X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fext-value.c;fp=src%2Fext-value.c;h=47c4829a01802b5298458861816e8a38c43be769;hb=5b7b5519d955cd0c99d094ba140514e0a2b73083;hp=0000000000000000000000000000000000000000;hpb=8988b3bef0760b4cab8144715cc3d8f55688861c;p=chaz%2Fhomebank diff --git a/src/ext-value.c b/src/ext-value.c new file mode 100644 index 0000000..47c4829 --- /dev/null +++ b/src/ext-value.c @@ -0,0 +1,82 @@ + +#include + +#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 +