diff options
Diffstat (limited to '')
-rw-r--r-- | libraries/eina/src/examples/eina_value_03.c | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/libraries/eina/src/examples/eina_value_03.c b/libraries/eina/src/examples/eina_value_03.c new file mode 100644 index 0000000..85f42b3 --- /dev/null +++ b/libraries/eina/src/examples/eina_value_03.c | |||
@@ -0,0 +1,178 @@ | |||
1 | //Compile with: | ||
2 | //gcc eina_value_03.c -o eina_value_03 `pkg-config --cflags --libs eina` | ||
3 | |||
4 | #include <Eina.h> | ||
5 | #include <sys/time.h> | ||
6 | |||
7 | static Eina_Bool | ||
8 | _tz_setup(const Eina_Value_Type *type, void *mem) | ||
9 | { | ||
10 | memset(mem, 0, type->value_size); | ||
11 | return EINA_TRUE; | ||
12 | } | ||
13 | |||
14 | static Eina_Bool | ||
15 | _tz_flush(const Eina_Value_Type *type, void *mem) | ||
16 | { | ||
17 | return EINA_TRUE; | ||
18 | } | ||
19 | |||
20 | static Eina_Bool | ||
21 | _tz_copy(const Eina_Value_Type *type, const void *src, void * dst) | ||
22 | { | ||
23 | struct timezone *tzsrc = src; | ||
24 | struct timezone *tzdst = dst; | ||
25 | *tzdst = *tzsrc; | ||
26 | return EINA_TRUE; | ||
27 | } | ||
28 | |||
29 | static Eina_Bool | ||
30 | _tz_compare(const Eina_Value_Type *type, const void *a, const void *b) | ||
31 | { | ||
32 | struct timezone tza = *(struct timezone*)a; | ||
33 | struct timezone tzb = *(struct timezone*)b; | ||
34 | |||
35 | if (tza.tz_minuteswest < tzb.tz_minuteswest) | ||
36 | return -1; | ||
37 | else if (tza.tz_minuteswest > tzb.tz_minuteswest) | ||
38 | return 1; | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static Eina_Bool | ||
43 | _tz_pset(const Eina_Value_Type *type, void *mem, const void *ptr) | ||
44 | { | ||
45 | *(struct timezone*)mem = *(struct timezone*)ptr; | ||
46 | return EINA_TRUE; | ||
47 | } | ||
48 | |||
49 | static Eina_Bool | ||
50 | _tz_vset(const Eina_Value_Type *type, void *mem, va_list args) | ||
51 | { | ||
52 | const struct timezone tz = va_arg(args, struct timezone); | ||
53 | return _tz_pset(type, mem, &tz); | ||
54 | } | ||
55 | |||
56 | static Eina_Bool | ||
57 | _tz_pget(const Eina_Value_Type *type, const void *mem, void *ptr) | ||
58 | { | ||
59 | memcpy(ptr, mem, type->value_size); | ||
60 | return EINA_TRUE; | ||
61 | } | ||
62 | |||
63 | static Eina_Bool | ||
64 | _tz_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem) | ||
65 | { | ||
66 | struct timezone v = *(struct timezone*)type_mem; | ||
67 | |||
68 | eina_error_set(0); | ||
69 | |||
70 | if (convert == EINA_VALUE_TYPE_UCHAR) | ||
71 | { | ||
72 | unsigned char other_mem = v.tz_minuteswest; | ||
73 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
74 | } | ||
75 | else if (convert == EINA_VALUE_TYPE_USHORT) | ||
76 | { | ||
77 | unsigned short other_mem = v.tz_minuteswest; | ||
78 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
79 | } | ||
80 | else if (convert == EINA_VALUE_TYPE_UINT) | ||
81 | { | ||
82 | unsigned int other_mem = v.tz_minuteswest; | ||
83 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
84 | } | ||
85 | else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP)) | ||
86 | { | ||
87 | unsigned long other_mem = v.tz_minuteswest; | ||
88 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
89 | } | ||
90 | else if (convert == EINA_VALUE_TYPE_UINT64) | ||
91 | { | ||
92 | uint64_t other_mem = v.tz_minuteswest; | ||
93 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
94 | } | ||
95 | else if (convert == EINA_VALUE_TYPE_CHAR) | ||
96 | { | ||
97 | char other_mem = v.tz_minuteswest; | ||
98 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
99 | } | ||
100 | else if (convert == EINA_VALUE_TYPE_SHORT) | ||
101 | { | ||
102 | short other_mem = v.tz_minuteswest; | ||
103 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
104 | } | ||
105 | else if (convert == EINA_VALUE_TYPE_INT) | ||
106 | { | ||
107 | int other_mem = v.tz_minuteswest; | ||
108 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
109 | } | ||
110 | else if (convert == EINA_VALUE_TYPE_LONG) | ||
111 | { | ||
112 | long other_mem = v.tz_minuteswest; | ||
113 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
114 | } | ||
115 | else if (convert == EINA_VALUE_TYPE_INT64) | ||
116 | { | ||
117 | int64_t other_mem = v.tz_minuteswest; | ||
118 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
119 | } | ||
120 | else if (convert == EINA_VALUE_TYPE_FLOAT) | ||
121 | return eina_value_type_pset(convert, convert_mem, &v.tz_minuteswest); | ||
122 | else if (convert == EINA_VALUE_TYPE_DOUBLE) | ||
123 | return eina_value_type_pset(convert, convert_mem, &v.tz_minuteswest); | ||
124 | else if (convert == EINA_VALUE_TYPE_STRINGSHARE || | ||
125 | convert == EINA_VALUE_TYPE_STRING) | ||
126 | { | ||
127 | const char *other_mem; | ||
128 | char buf[64]; | ||
129 | snprintf(buf, sizeof(buf), "%d", v.tz_minuteswest); | ||
130 | other_mem = buf; /* required due &buf == buf */ | ||
131 | return eina_value_type_pset(convert, convert_mem, &other_mem); | ||
132 | } | ||
133 | |||
134 | eina_error_set(EINA_ERROR_VALUE_FAILED); | ||
135 | return EINA_FALSE; | ||
136 | } | ||
137 | |||
138 | static Eina_Value_Type TZ_TYPE = { | ||
139 | EINA_VALUE_TYPE_VERSION, | ||
140 | sizeof(struct timezone), | ||
141 | "struct timezone", | ||
142 | _tz_setup, | ||
143 | _tz_flush, | ||
144 | _tz_copy, | ||
145 | _tz_compare, | ||
146 | _tz_convert_to, | ||
147 | NULL, //No convert from | ||
148 | _tz_vset, | ||
149 | _tz_pset, | ||
150 | _tz_pget | ||
151 | }; | ||
152 | |||
153 | int main(int argc, char **argv) | ||
154 | { | ||
155 | Eina_Value vtv, vtz; | ||
156 | struct timeval tv; | ||
157 | struct timezone tz; | ||
158 | char *s; | ||
159 | |||
160 | eina_init(); | ||
161 | |||
162 | eina_value_setup(&vtv, EINA_VALUE_TYPE_TIMEVAL); | ||
163 | eina_value_setup(&vtz, &TZ_TYPE); | ||
164 | |||
165 | gettimeofday(&tv, &tz); | ||
166 | eina_value_set(&vtv, tv); | ||
167 | eina_value_set(&vtz, tz); | ||
168 | |||
169 | s = eina_value_to_string(&vtv); | ||
170 | printf("time: %s\n", s); | ||
171 | free(s); | ||
172 | s = eina_value_to_string(&vtz); | ||
173 | printf("timezone: %s\n", s); | ||
174 | free(s); | ||
175 | |||
176 | eina_value_flush(&vtz); | ||
177 | eina_value_flush(&vtv); | ||
178 | } | ||