static void set_gdate_val( gpointer pObject, GDate* value ) { slot_info_t* pInfo = (slot_info_t*)pObject; KvpValue *pValue = NULL; g_return_if_fail( pObject != NULL ); if ( pInfo->value_type != KVP_TYPE_GDATE ) return; pValue = kvp_value_new_gdate( *value ); set_slot_from_value( pInfo, pValue ); }
KvpValue * kvp_value_copy(const KvpValue * value) { if (!value) return NULL; switch (value->type) { case KVP_TYPE_GINT64: return kvp_value_new_gint64(value->value.int64); break; case KVP_TYPE_DOUBLE: return kvp_value_new_double(value->value.dbl); break; case KVP_TYPE_NUMERIC: return kvp_value_new_gnc_numeric(value->value.numeric); break; case KVP_TYPE_STRING: return kvp_value_new_string(value->value.str); break; case KVP_TYPE_GUID: return kvp_value_new_guid(value->value.guid); break; case KVP_TYPE_GDATE: return kvp_value_new_gdate(value->value.gdate); break; case KVP_TYPE_TIMESPEC: return kvp_value_new_timespec(value->value.timespec); break; case KVP_TYPE_BINARY: return kvp_value_new_binary(value->value.binary.data, value->value.binary.datasize); break; case KVP_TYPE_GLIST: return kvp_value_new_glist(value->value.list); break; case KVP_TYPE_FRAME: return kvp_value_new_frame(value->value.frame); break; default: break; } return NULL; }
KvpValue* kvp_value_from_gvalue (const GValue *gval) { KvpValue *val = NULL; GType type = G_VALUE_TYPE (gval); g_return_val_if_fail (G_VALUE_TYPE (gval), NULL); if (type == G_TYPE_INT64) val = kvp_value_new_gint64 (g_value_get_int64 (gval)); else if (type == G_TYPE_DOUBLE) val = kvp_value_new_double (g_value_get_double (gval)); else if (type == GNC_TYPE_NUMERIC) val = kvp_value_new_numeric (*(gnc_numeric*)g_value_get_boxed (gval)); else if (type == G_TYPE_STRING) val = kvp_value_new_string (g_value_get_string (gval)); else if (type == GNC_TYPE_GUID) val = kvp_value_new_guid ((GncGUID*)g_value_get_boxed (gval)); else if (type == GNC_TYPE_TIMESPEC) val = kvp_value_new_timespec (*(Timespec*)g_value_get_boxed (gval)); else if (type == G_TYPE_DATE) val = kvp_value_new_gdate (*(GDate*)g_value_get_boxed (gval)); else if (type == GNC_TYPE_VALUE_LIST) { GList *gvalue_list = (GList*)g_value_get_boxed (gval); GList *kvp_list = NULL; g_list_foreach (gvalue_list, (GFunc)kvp_value_list_from_gvalue, &kvp_list); kvp_list = g_list_reverse (kvp_list); val = kvp_value_new_glist_nc (kvp_list); // g_list_free_full (gvalue_list, (GDestroyNotify)g_value_unset); // gvalue_list = NULL; } else PWARN ("Error! Don't know how to make a KvpValue from a %s", G_VALUE_TYPE_NAME (gval)); return val; }