]> Dogcows Code - chaz/homebank/blob - src/ext-value.c
47c4829a01802b5298458861816e8a38c43be769
[chaz/homebank] / src / ext-value.c
1
2 #include <stdarg.h>
3
4 #include "ext-value.h"
5
6
7 const GValue* ext_value_undef()
8 {
9 static GValue v = G_VALUE_INIT;
10 return &v;
11 }
12
13 const GValue* ext_value_true()
14 {
15 static GValue v = G_VALUE_INIT;
16 if (!G_VALUE_HOLDS_BOOLEAN(&v)) EXT_BOOLEAN(&v, TRUE);
17 return &v;
18 }
19
20 const GValue* ext_value_false()
21 {
22 static GValue v = G_VALUE_INIT;
23 if (!G_VALUE_HOLDS_BOOLEAN(&v)) EXT_BOOLEAN(&v, FALSE);
24 return &v;
25 }
26
27
28 GValue* EXT_LIST(GValue* v, ...)
29 {
30 GPtrArray* a = g_ptr_array_new();
31
32 va_list ap;
33 va_start(ap, v);
34
35 for (;;) {
36 GValue* item = (GValue*)va_arg(ap, GValue*);
37 if (!item) break;
38 g_ptr_array_add(a, item);
39 }
40
41 va_end(ap);
42
43 return EXT_ARRAY(v, a);
44 }
45
46 GValue* EXT_HASH(GValue* v, ...)
47 {
48 GHashTable* h = g_hash_table_new(g_str_hash, g_str_equal);
49
50 va_list ap;
51 va_start(ap, v);
52
53 for (;;) {
54 gchar* key = (gchar*)va_arg(ap, gchar*);
55 if (!key) break;
56 GValue* val = (GValue*)va_arg(ap, GValue*);
57 g_hash_table_insert(h, key, val);
58 }
59
60 va_end(ap);
61
62 return EXT_HASH_TABLE(v, h);
63 }
64
65 GValue* EXT_JULIAN(GValue* v, guint32 d)
66 {
67 GDate* date = g_date_new_julian(d);
68 return EXT_DATE(v, date);
69 }
70
71
72 #define obj(CTYPE, _2, _3, _4, PREFIX) \
73 GType PREFIX##get_type() \
74 { \
75 static GType type = 0; \
76 if (type == 0) \
77 type = g_pointer_type_register_static(#CTYPE); \
78 return type; \
79 }
80 #include "ext-value.h"
81 #undef obj
82
This page took 0.035419 seconds and 3 git commands to generate.