7 #include <glib-object.h> 9 #define ASSIGN_INT(T, G, V) \ 10 if(sizeof(gchar) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_CHAR) g_value_set_schar(G, (gchar)V); \ 11 else if(sizeof(gint) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_INT) g_value_set_int(G, (gint)V); \ 12 else if(sizeof(glong) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_LONG) g_value_set_long(G, (glong)V); \ 13 else if(sizeof(gint64) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_INT64) g_value_set_int64(G, (gint64)V); 15 #define ASSIGN_UINT(T, G, V) \ 16 if(sizeof(guchar) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_UCHAR) g_value_set_uchar(G, (guchar)V); \ 17 else if(sizeof(guint) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_UINT) g_value_set_uint(G, (guint)V); \ 18 else if(sizeof(gulong) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_ULONG) g_value_set_ulong(G, (gulong)V); \ 19 else if(sizeof(guint64) >= sizeof(T) && G_VALUE_TYPE(G) == G_TYPE_UINT64) g_value_set_uint64(G, (guint64)V); 23 GValue tmp = G_VALUE_INIT;
27 if(cfe_value == NULL || gvalue == NULL)
return FALSE;
33 if(G_VALUE_TYPE(gvalue) != 0)
37 g_value_init(&tmp, G_VALUE_TYPE(gvalue));
41 if(!g_value_type_transformable(gtype, G_VALUE_TYPE(gvalue)))
42 g_value_init(&tmp, gtype);
49 g_value_init(gvalue, gtype);
50 g_value_init(&tmp, gtype);
59 g_value_set_boolean(&tmp, (gboolean)
bool);
129 if(
sizeof(gfloat) >=
sizeof(
float) && G_VALUE_TYPE(&tmp) == G_TYPE_FLOAT)
130 g_value_set_float(&tmp, (gfloat)
f);
131 if(
sizeof(gdouble) >=
sizeof(
float) && G_VALUE_TYPE(&tmp) == G_TYPE_DOUBLE)
132 g_value_set_double(&tmp, (gdouble)
f);
140 if(
sizeof(gfloat) >=
sizeof(
double) && G_VALUE_TYPE(&tmp) == G_TYPE_FLOAT)
141 g_value_set_float(&tmp, (gfloat)d);
142 if(
sizeof(gdouble) >=
sizeof(
double) && G_VALUE_TYPE(&tmp) == G_TYPE_DOUBLE)
143 g_value_set_double(&tmp, (gdouble)d);
151 if(
sizeof(gfloat) >=
sizeof(
long double) && G_VALUE_TYPE(&tmp) == G_TYPE_FLOAT)
152 g_value_set_float(&tmp, (gfloat)d);
153 if(
sizeof(gdouble) >=
sizeof(
long double) && G_VALUE_TYPE(&tmp) == G_TYPE_DOUBLE)
154 g_value_set_double(&tmp, (gdouble)d);
161 g_value_set_string(&tmp, (gchar *)str);
168 g_value_set_string(&tmp, (gchar *)str);
175 g_value_set_string(&tmp, (gchar *)str);
182 g_value_set_pointer(&tmp, (gpointer)p);
187 g_value_set_pointer(&tmp, (gpointer)NULL);
195 if(G_VALUE_TYPE(&tmp) == 0)
198 g_value_copy(&tmp, gvalue);
207 return (gtype == G_TYPE_BOOLEAN ||
208 (
sizeof(gint) >=
sizeof(int8_t) && gtype == G_TYPE_INT) ||
209 (
sizeof(gchar) >=
sizeof(int8_t) && gtype == G_TYPE_CHAR) ||
210 (
sizeof(glong) >=
sizeof(int8_t) && gtype == G_TYPE_LONG) ||
211 (
sizeof(gint64) >=
sizeof(int8_t) && gtype == G_TYPE_INT64));
213 return ((
sizeof(guchar) >=
sizeof(uint8_t) && gtype == G_TYPE_UCHAR) ||
214 (
sizeof(guint) >=
sizeof(uint8_t) && gtype == G_TYPE_UINT) ||
215 (
sizeof(gulong) >=
sizeof(uint8_t) && gtype == G_TYPE_ULONG) ||
216 (
sizeof(guint64) >=
sizeof(uint8_t) && gtype == G_TYPE_UINT64));
218 return ((
sizeof(gchar) >=
sizeof(int8_t) && gtype == G_TYPE_CHAR) ||
219 (
sizeof(gint) >=
sizeof(int8_t) && gtype == G_TYPE_INT) ||
220 (
sizeof(glong) >=
sizeof(int8_t) && gtype == G_TYPE_LONG) ||
221 (
sizeof(gint64) >=
sizeof(int8_t) && gtype == G_TYPE_INT64));
223 return ((
sizeof(guint) >=
sizeof(uint16_t) && gtype == G_TYPE_UINT) ||
224 (
sizeof(gulong) >=
sizeof(uint16_t) && gtype == G_TYPE_ULONG) ||
225 (
sizeof(guint64) >=
sizeof(uint16_t) && gtype == G_TYPE_UINT64));
227 return ((
sizeof(gint) >=
sizeof(int16_t) && gtype == G_TYPE_INT) ||
228 (
sizeof(glong) >=
sizeof(int16_t) && gtype == G_TYPE_LONG) ||
229 (
sizeof(gint64) >=
sizeof(int16_t) && gtype == G_TYPE_INT64));
231 return ((
sizeof(guint) >=
sizeof(uint32_t) && gtype == G_TYPE_UINT) ||
232 (
sizeof(gulong) >=
sizeof(uint32_t) && gtype == G_TYPE_ULONG) ||
233 (
sizeof(guint64) >=
sizeof(uint32_t) && gtype == G_TYPE_UINT64));
235 return ((
sizeof(gint) >=
sizeof(int32_t) && gtype == G_TYPE_INT) ||
236 (
sizeof(glong) >=
sizeof(int32_t) && gtype == G_TYPE_LONG) ||
237 (
sizeof(gint64) >=
sizeof(int32_t) && gtype == G_TYPE_INT64));
239 return ((
sizeof(guint) >=
sizeof(uint64_t) && gtype == G_TYPE_UINT) ||
240 (
sizeof(gulong) >=
sizeof(uint64_t) && gtype == G_TYPE_ULONG) ||
241 (
sizeof(guint64) >=
sizeof(uint64_t) && gtype == G_TYPE_UINT64));
243 return ((
sizeof(gint) >=
sizeof(int64_t) && gtype == G_TYPE_INT) ||
244 (
sizeof(glong) >=
sizeof(int64_t) && gtype == G_TYPE_LONG) ||
245 (
sizeof(gint64) >=
sizeof(int64_t) && gtype == G_TYPE_INT64));
247 return ((
sizeof(gfloat) >=
sizeof(
float) && gtype == G_TYPE_FLOAT) ||
248 (
sizeof(gdouble) >=
sizeof(
float) && gtype == G_TYPE_DOUBLE));
250 return ((
sizeof(gfloat) >=
sizeof(
double) && gtype == G_TYPE_FLOAT) ||
251 (
sizeof(gdouble) >=
sizeof(
double) && gtype == G_TYPE_DOUBLE));
253 return ((
sizeof(gfloat) >=
sizeof(
long double) && gtype == G_TYPE_FLOAT) ||
254 (
sizeof(gdouble) >=
sizeof(
long double) && gtype == G_TYPE_DOUBLE));
258 return (gtype == G_TYPE_STRING);
260 return (gtype == G_TYPE_POINTER);
262 return (gtype == G_TYPE_POINTER);
275 return G_TYPE_BOOLEAN;
281 if(
sizeof(guint) >=
sizeof(uint16_t))
return G_TYPE_UINT;
282 else if(
sizeof(gulong) >=
sizeof(uint16_t))
return G_TYPE_ULONG;
283 else if(
sizeof(guint64) >=
sizeof(uint16_t))
return G_TYPE_UINT64;
286 if(
sizeof(gint) >=
sizeof(int16_t))
return G_TYPE_INT;
287 else if(
sizeof(glong) >=
sizeof(int16_t))
return G_TYPE_LONG;
288 else if(
sizeof(gint64) >=
sizeof(int16_t))
return G_TYPE_INT64;
291 if(
sizeof(guint) >=
sizeof(uint32_t))
return G_TYPE_UINT;
292 else if(
sizeof(gulong) >=
sizeof(uint32_t))
return G_TYPE_ULONG;
293 else if(
sizeof(guint64) >=
sizeof(uint32_t))
return G_TYPE_UINT64;
296 if(
sizeof(gint) >=
sizeof(int32_t))
return G_TYPE_INT;
297 else if(
sizeof(glong) >=
sizeof(int32_t))
return G_TYPE_LONG;
298 else if(
sizeof(gint64) >=
sizeof(int32_t))
return G_TYPE_INT64;
301 if(
sizeof(guint) >=
sizeof(uint64_t))
return G_TYPE_UINT;
302 else if(
sizeof(gulong) >=
sizeof(uint64_t))
return G_TYPE_ULONG;
303 else if(
sizeof(guint64) >=
sizeof(uint64_t))
return G_TYPE_UINT64;
306 if(
sizeof(gint) >=
sizeof(int64_t))
return G_TYPE_INT;
307 else if(
sizeof(glong) >=
sizeof(int64_t))
return G_TYPE_LONG;
308 else if(
sizeof(gint64) >=
sizeof(int64_t))
return G_TYPE_INT64;
311 if(
sizeof(gfloat) >=
sizeof(
float))
return G_TYPE_FLOAT;
312 else if(
sizeof(gdouble) >=
sizeof(
float))
return G_TYPE_DOUBLE;
315 if(
sizeof(gfloat) >=
sizeof(
double))
return G_TYPE_FLOAT;
316 else if(
sizeof(gdouble) >=
sizeof(
double))
return G_TYPE_DOUBLE;
319 if(
sizeof(gfloat) >=
sizeof(
long double))
return G_TYPE_FLOAT;
320 else if(
sizeof(gdouble) >=
sizeof(
long double))
return G_TYPE_DOUBLE;
325 return G_TYPE_STRING;
327 return G_TYPE_POINTER;
329 return G_TYPE_POINTER;
334 return G_TYPE_INVALID;
uint8_t cfe_value_get_uint32(const cfe_value_t *v, uint32_t *value)
uint8_t cfe_value_get_int16(const cfe_value_t *v, int16_t *value)
uint8_t cfe_value_get_int8(const cfe_value_t *v, int8_t *value)
uint8_t cfe_value_get_string(const cfe_value_t *v, char **value)
uint8_t cfe_value_get_uint8(const cfe_value_t *v, uint8_t *value)
uint8_t cfe_value_get_double(const cfe_value_t *v, double *value)
enum cfe_value_type cfe_value_type_t
uint8_t cfe_value_get_float(const cfe_value_t *v, float *value)
uint8_t cfe_value_get_long_double(const cfe_value_t *v, long double *value)
uint8_t cfe_value_get_pointer(const cfe_value_t *v, void **value)
uint8_t cfe_value_get_int32(const cfe_value_t *v, int32_t *value)
cfe_value_type_t cfe_value_get_type(const cfe_value_t *v)
uint8_t cfe_value_get_boolean(const cfe_value_t *v, int8_t *value)
uint8_t cfe_value_get_uint64(const cfe_value_t *v, uint64_t *value)
uint8_t cfe_value_get_uint16(const cfe_value_t *v, uint16_t *value)
uint8_t cfe_value_get_int64(const cfe_value_t *v, int64_t *value)