2 //gcc eina_value_03.c -o eina_value_03 `pkg-config --cflags --libs eina`
8 _tz_setup(const Eina_Value_Type *type, void *mem)
10 memset(mem, 0, type->value_size);
15 _tz_flush(const Eina_Value_Type *type, void *mem)
21 _tz_copy(const Eina_Value_Type *type, const void *src, void * dst)
23 struct timezone *tzsrc = src;
24 struct timezone *tzdst = dst;
30 _tz_compare(const Eina_Value_Type *type, const void *a, const void *b)
32 struct timezone tza = *(struct timezone*)a;
33 struct timezone tzb = *(struct timezone*)b;
35 if (tza.tz_minuteswest < tzb.tz_minuteswest)
37 else if (tza.tz_minuteswest > tzb.tz_minuteswest)
43 _tz_pset(const Eina_Value_Type *type, void *mem, const void *ptr)
45 *(struct timezone*)mem = *(struct timezone*)ptr;
50 _tz_vset(const Eina_Value_Type *type, void *mem, va_list args)
52 const struct timezone tz = va_arg(args, struct timezone);
53 return _tz_pset(type, mem, &tz);
57 _tz_pget(const Eina_Value_Type *type, const void *mem, void *ptr)
59 memcpy(ptr, mem, type->value_size);
64 _tz_convert_to(const Eina_Value_Type *type, const Eina_Value_Type *convert, const void *type_mem, void *convert_mem)
66 struct timezone v = *(struct timezone*)type_mem;
70 if (convert == EINA_VALUE_TYPE_UCHAR)
72 unsigned char other_mem = v.tz_minuteswest;
73 return eina_value_type_pset(convert, convert_mem, &other_mem);
75 else if (convert == EINA_VALUE_TYPE_USHORT)
77 unsigned short other_mem = v.tz_minuteswest;
78 return eina_value_type_pset(convert, convert_mem, &other_mem);
80 else if (convert == EINA_VALUE_TYPE_UINT)
82 unsigned int other_mem = v.tz_minuteswest;
83 return eina_value_type_pset(convert, convert_mem, &other_mem);
85 else if ((convert == EINA_VALUE_TYPE_ULONG) || (convert == EINA_VALUE_TYPE_TIMESTAMP))
87 unsigned long other_mem = v.tz_minuteswest;
88 return eina_value_type_pset(convert, convert_mem, &other_mem);
90 else if (convert == EINA_VALUE_TYPE_UINT64)
92 uint64_t other_mem = v.tz_minuteswest;
93 return eina_value_type_pset(convert, convert_mem, &other_mem);
95 else if (convert == EINA_VALUE_TYPE_CHAR)
97 char other_mem = v.tz_minuteswest;
98 return eina_value_type_pset(convert, convert_mem, &other_mem);
100 else if (convert == EINA_VALUE_TYPE_SHORT)
102 short other_mem = v.tz_minuteswest;
103 return eina_value_type_pset(convert, convert_mem, &other_mem);
105 else if (convert == EINA_VALUE_TYPE_INT)
107 int other_mem = v.tz_minuteswest;
108 return eina_value_type_pset(convert, convert_mem, &other_mem);
110 else if (convert == EINA_VALUE_TYPE_LONG)
112 long other_mem = v.tz_minuteswest;
113 return eina_value_type_pset(convert, convert_mem, &other_mem);
115 else if (convert == EINA_VALUE_TYPE_INT64)
117 int64_t other_mem = v.tz_minuteswest;
118 return eina_value_type_pset(convert, convert_mem, &other_mem);
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)
127 const char *other_mem;
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);
134 eina_error_set(EINA_ERROR_VALUE_FAILED);
138 static Eina_Value_Type TZ_TYPE = {
139 EINA_VALUE_TYPE_VERSION,
140 sizeof(struct timezone),
147 NULL, //No convert from
153 int main(int argc, char **argv)
162 eina_value_setup(&vtv, EINA_VALUE_TYPE_TIMEVAL);
163 eina_value_setup(&vtz, &TZ_TYPE);
165 gettimeofday(&tv, &tz);
166 eina_value_set(&vtv, tv);
167 eina_value_set(&vtz, tz);
169 s = eina_value_to_string(&vtv);
170 printf("time: %s\n", s);
172 s = eina_value_to_string(&vtz);
173 printf("timezone: %s\n", s);
176 eina_value_flush(&vtz);
177 eina_value_flush(&vtv);