61 KvpValueBinaryData binary;
75 kvp_hash_func (gconstpointer v)
77 return g_str_hash (v);
81 kvp_comp_func (gconstpointer v, gconstpointer v2)
83 return g_str_equal (v, v2);
87 init_frame_body_if_needed (
KvpFrame * f)
91 f->hash = g_hash_table_new (&kvp_hash_func, &kvp_comp_func);
93 return (f->hash != NULL);
107 kvp_frame_delete_worker (gpointer key, gpointer value,
108 gpointer user_data __attribute__ ((unused)))
123 g_hash_table_foreach (frame->hash, &kvp_frame_delete_worker,
127 g_hash_table_destroy (frame->hash);
144 kvp_frame_copy_worker (gpointer key, gpointer value, gpointer user_data)
147 g_hash_table_insert (dest->hash,
162 if (!init_frame_body_if_needed (retval))
164 g_hash_table_foreach (frame->hash,
165 &kvp_frame_copy_worker, (gpointer) retval);
179 gpointer orig_value = NULL;
184 if (!init_frame_body_if_needed (frame))
187 key_exists = g_hash_table_lookup_extended (frame->hash, slot,
188 &orig_key, &orig_value);
191 g_hash_table_remove (frame->hash, slot);
197 g_hash_table_insert (frame->hash,
206 kvp_frame_set_slot_destructively (
KvpFrame * frame,
const gchar *slot,
220 get_or_make (
KvpFrame * fr,
const gchar *key)
225 value = kvp_frame_get_slot (fr, key);
242 kvp_frame_get_frame_slash_trash (
KvpFrame * frame, gchar *key_path)
245 if (!frame || !key_path)
258 next = strchr (key,
'/');
262 frame = get_or_make (frame, key);
276 kvp_frame_get_frame_or_null_slash_trash (
const KvpFrame * frame,
281 if (!frame || !key_path)
294 next = strchr (key,
'/');
298 value = kvp_frame_get_slot (frame, key);
316 get_trailer_make (
KvpFrame * frame,
const gchar *key_path,
321 if (!frame || !key_path || (0 == key_path[0]))
324 last_key = strrchr (key_path,
'/');
325 if (NULL == last_key)
326 last_key = (gchar *) key_path;
327 else if (last_key == key_path)
329 else if (0 == last_key[1])
334 root = g_strdup (key_path);
335 lkey = strrchr (root,
'/');
337 frame = kvp_frame_get_frame_slash_trash (frame, root);
353 get_trailer_or_null (
const KvpFrame * frame,
const gchar *key_path,
358 if (!frame || !key_path || (0 == key_path[0]))
361 last_key = strrchr (key_path,
'/');
362 if (NULL == last_key)
363 last_key = (gchar *) key_path;
364 else if (last_key == key_path)
366 else if (0 == last_key[1])
371 root = g_strdup (key_path);
372 lkey = strrchr (root,
'/');
374 frame = kvp_frame_get_frame_or_null_slash_trash (frame, root);
390 value = kvp_value_new_gint64 (ival);
400 value = kvp_value_new_double (dval);
410 value = kvp_value_new_time (qt);
421 value = kvp_value_new_numeric (nval);
443 value = kvp_value_new_string (str);
454 value = kvp_value_new_guid (guid);
464 value = kvp_value_new_frame (fr);
488 frame = get_trailer_make (frame, key_path, &last_key);
491 kvp_frame_set_slot_destructively (frame, last_key, value);
502 frame = get_trailer_make (frame, key_path, &last_key);
508 kvp_frame_set_slot_destructively (frame, last_key, new_value);
521 frame = get_trailer_make (frame, key_path, &last_key);
524 (
KvpFrame *) get_trailer_or_null (frame, key_path, &last_key);
535 kvp_frame_add_value_nc (
KvpFrame * frame,
const gchar *path,
541 frame = (
KvpFrame *) get_trailer_or_null (frame, path, &key);
542 oldvalue = kvp_frame_get_slot (frame, key);
544 ENTER (
"old frame=%s", kvp_frame_to_string (frame));
550 GList *vlist = oldvalue->value.list;
551 vlist = g_list_append (vlist, value);
552 oldvalue->value.list = vlist;
560 vlist = g_list_append (vlist, oldvalue);
561 vlist = g_list_append (vlist, value);
566 LEAVE (
"new frame=%s", kvp_frame_to_string (frame));
573 LEAVE (
"new frame=%s", kvp_frame_to_string (frame));
581 frame = kvp_frame_add_value_nc (frame, path, value);
591 value = kvp_value_new_gint64 (ival);
592 frame = kvp_frame_add_value_nc (frame, path, value);
601 value = kvp_value_new_double (dval);
602 frame = kvp_frame_add_value_nc (frame, path, value);
612 value = kvp_value_new_numeric (nval);
613 frame = kvp_frame_add_value_nc (frame, path, value);
622 value = kvp_value_new_time (qt);
623 frame = kvp_frame_add_value_nc (frame, path, value);
629 kvp_frame_add_boolean (
KvpFrame * frame,
const gchar * path, gboolean val)
633 frame = kvp_frame_add_value_nc (frame, path, value);
642 value = kvp_value_new_string (str);
643 frame = kvp_frame_add_value_nc (frame, path, value);
652 value = kvp_value_new_guid (guid);
653 frame = kvp_frame_add_value_nc (frame, path, value);
662 value = kvp_value_new_frame (fr);
663 frame = kvp_frame_add_value_nc (frame, path, value);
673 frame = kvp_frame_add_value_nc (frame, path, value);
689 g_return_if_fail (slot && *slot !=
'\0');
693 kvp_frame_set_slot_destructively (frame, slot, new_value);
703 g_return_if_fail (slot && *slot !=
'\0');
705 kvp_frame_set_slot_destructively (frame, slot, value);
709 kvp_frame_get_slot (
const KvpFrame * frame,
const gchar *slot)
716 v = g_hash_table_lookup (frame->hash, slot);
724 const KvpValue * new_value,
const gchar *first_key, ...)
732 g_return_if_fail (first_key && *first_key !=
'\0');
734 va_start (ap, first_key);
741 const gchar *next_key;
743 next_key = va_arg (ap,
const gchar *);
750 g_return_if_fail (*next_key !=
'\0');
752 value = kvp_frame_get_slot (frame, key);
756 KvpValue *frame_value = kvp_value_new_frame (new_frame);
760 value = kvp_frame_get_slot (frame, key);
777 const KvpValue * new_value, GSList * key_path)
779 if (!frame || !key_path)
784 const gchar *key = key_path->data;
790 g_return_if_fail (*key !=
'\0');
792 key_path = key_path->next;
799 value = kvp_frame_get_slot (frame, key);
803 KvpValue *frame_value = kvp_value_new_frame (new_frame);
807 value = kvp_frame_get_slot (frame, key);
830 p = strchr (enc,
'+');
837 p = strchr (enc,
'%');
857 *w = (gchar) (ch << 4 | cl);
884 buff = g_strdup (enc);
915 kvp_frame_get_gint64 (
const KvpFrame * frame,
const gchar *path)
918 frame = get_trailer_or_null (frame, path, &key);
923 kvp_frame_get_double (
const KvpFrame * frame,
const gchar *path)
926 frame = get_trailer_or_null (frame, path, &key);
927 return kvp_value_get_double (kvp_frame_get_slot (frame, key));
931 kvp_frame_get_numeric (
const KvpFrame * frame,
const gchar *path)
934 frame = get_trailer_or_null (frame, path, &key);
935 return kvp_value_get_numeric (kvp_frame_get_slot (frame, key));
939 kvp_frame_get_string (
const KvpFrame * frame,
const gchar *path)
942 frame = get_trailer_or_null (frame, path, &key);
947 kvp_frame_get_boolean (
const KvpFrame * frame,
const gchar * path)
950 frame = get_trailer_or_null (frame, path, &key);
951 return kvp_value_get_boolean (kvp_frame_get_slot (frame, key));
955 kvp_frame_get_guid (
const KvpFrame * frame,
const gchar *path)
958 frame = get_trailer_or_null (frame, path, &key);
963 kvp_frame_get_binary (
const KvpFrame * frame,
const gchar *path,
964 guint64 * size_return)
967 frame = get_trailer_or_null (frame, path, &key);
973 kvp_frame_get_time (
const KvpFrame * frame,
const gchar *path)
976 frame = get_trailer_or_null (frame, path, &key);
977 return kvp_value_get_time (kvp_frame_get_slot (frame, key));
984 frame = get_trailer_or_null (frame, path, &key);
989 kvp_frame_get_value (
const KvpFrame * frame,
const gchar *path)
992 frame = get_trailer_or_null (frame, path, &key);
993 return kvp_frame_get_slot (frame, key);
1006 const gchar *key = key_path->data;
1011 frame = get_or_make (frame, key);
1015 key_path = key_path->next;
1031 frame = get_or_make (frame, key);
1034 key = va_arg (ap,
const char *);
1045 if (!frame || !key_path)
1048 root = g_strdup (key_path);
1049 frame = kvp_frame_get_frame_slash_trash (frame, root);
1063 if (!frame || !first_key)
1066 va_start (ap, first_key);
1073 value = kvp_frame_get_slot (frame, key);
1077 key = va_arg (ap,
const gchar *);
1097 if (!frame || !key_path)
1102 const gchar *key = key_path->data;
1108 value = kvp_frame_get_slot (frame, key);
1112 key_path = key_path->next;
1134 for (node = list; node; node = node->next)
1147 GList *retval = NULL;
1155 retval = g_list_copy ((GList *) list);
1158 for (lptr = retval; lptr; lptr = lptr->next)
1176 if (!list1 && list2)
1178 if (list1 && !list2)
1205 kvp_value_new_gint64 (gint64 value)
1209 retval->value.int64 = value;
1214 kvp_value_new_double (gdouble value)
1218 retval->value.dbl = value;
1227 retval->value.gbool = value;
1236 retval->value.numeric = value;
1241 kvp_value_new_string (
const gchar *value)
1249 retval->value.str = g_strdup (value);
1254 kvp_value_new_guid (
const GUID * value)
1262 retval->value.guid = g_new0 (
GUID, 1);
1263 memcpy (retval->value.guid, value, sizeof (
GUID));
1268 kvp_value_new_time (
QofTime *value)
1272 retval->value.qt = value;
1277 kvp_value_new_binary (gconstpointer value, guint64 datasize)
1285 retval->value.binary.data = g_new0 (gpointer, datasize);
1286 retval->value.binary.datasize = datasize;
1287 memcpy (retval->value.binary.data, value, datasize);
1300 retval->value.binary.data = value;
1301 retval->value.binary.datasize = datasize;
1327 retval->value.list = value;
1332 kvp_value_new_frame (
const KvpFrame * value)
1353 retval->value.frame = value;
1363 switch (value->type)
1366 g_free (value->value.str);
1369 g_free (value->value.guid);
1372 g_free (value->value.binary.data);
1391 kvp_value_get_type (
const KvpValue * value)
1404 return value->value.int64;
1407 PERR (
" value type %d does not match KVP_TYPE_GINT64",
1414 kvp_value_get_double (
const KvpValue * value)
1419 return value->value.dbl;
1422 PERR (
" value type %d does not match KVP_TYPE_DOUBLE",
1429 kvp_value_get_numeric (
const KvpValue * value)
1434 return value->value.numeric;
1437 PERR (
" value type %d does not match KVP_TYPE_NUMERIC",
1449 return value->value.str;
1452 PERR (
" value type %d does not match KVP_TYPE_STRING",
1459 kvp_value_get_boolean (
const KvpValue * value)
1464 return value->value.gbool;
1467 PERR (
" value type %d does not match KVP_TYPE_BOOLEAN",
1479 return value->value.guid;
1482 PERR (
" value type %d does not match KVP_TYPE_GUID",
1489 kvp_value_get_time (
const KvpValue * value)
1494 return value->value.qt;
1497 PERR (
" value type %d does not match KVP_TYPE_TIME",
1510 PERR (
" no size specified");
1517 *size_return = value->value.binary.datasize;
1518 return value->value.binary.data;
1524 PERR (
" value type %d does not match KVP_TYPE_BINARY",
1536 return value->value.list;
1539 PERR (
" value type %d does not match KVP_TYPE_GLIST",
1551 return value->value.frame;
1554 PERR (
" value type %d does not match KVP_TYPE_FRAME",
1568 PERR (
" value type %d does not match KVP_TYPE_FRAME",
1572 oldframe = value->value.frame;
1573 value->value.frame = newframe;
1585 PERR (
" value type %d does not match KVP_TYPE_GLIST",
1590 oldlist = value->value.list;
1591 value->value.list = newlist;
1603 switch (value->type)
1606 return kvp_value_new_gint64 (value->value.int64);
1609 return kvp_value_new_double (value->value.dbl);
1612 return kvp_value_new_numeric (value->value.numeric);
1615 return kvp_value_new_string (value->value.str);
1618 return kvp_value_new_guid (value->value.guid);
1625 return kvp_value_new_time (value->value.qt);
1628 return kvp_value_new_binary (value->value.binary.data,
1629 value->value.binary.datasize);
1635 return kvp_value_new_frame (value->value.frame);
1650 g_hash_table_foreach (f->hash, (GHFunc) proc, data);
1664 if (kva->type < kvb->type)
1666 if (kva->type > kvb->type)
1672 if (kva->value.int64 < kvb->value.int64)
1674 if (kva->value.int64 > kvb->value.int64)
1683 kvb->value.numeric);
1686 return strcmp (kva->value.str, kvb->value.str);
1689 return guid_compare (kva->value.guid, kvb->value.guid);
1694 if (kva->value.gbool != kvb->value.gbool)
1695 return (kva->value.gbool) ? 1 : -1;
1703 if (kva->value.binary.datasize < kvb->value.binary.datasize)
1705 if (kva->value.binary.datasize > kvb->value.binary.datasize)
1707 return memcmp (kva->value.binary.data,
1708 kvb->value.binary.data, kva->value.binary.datasize);
1727 kvp_frame_compare_helper (
const gchar *key,
KvpValue * val, gpointer data)
1729 KvpFrameCompare *status = (KvpFrameCompare *) data;
1730 if (status->compare == 0)
1732 KvpFrame *other_frame = status->other_frame;
1733 KvpValue *other_val = kvp_frame_get_slot (other_frame, key);
1738 status->compare = 1;
1745 KvpFrameCompare status;
1756 if (!fa->hash && fb->hash)
1758 if (fa->hash && !fb->hash)
1762 status.other_frame = (
KvpFrame *) fb;
1767 if (status.compare != 0)
1768 return status.compare;
1770 status.other_frame = (
KvpFrame *) fa;
1775 return (-status.compare);
1780 binary_to_string (gconstpointer data, guint32 size)
1784 guchar *data_str = (guchar *) data;
1786 output = g_string_sized_new (size *
sizeof (gchar));
1788 for (i = 0; i < size; i++)
1790 g_string_append_printf (output,
"%02x",
1791 (guint32) (data_str[i]));
1798 kvp_value_glist_to_string (
const GList * list)
1802 const GList *cursor;
1804 tmp1 = g_strdup_printf (
"[ ");
1806 for (cursor = list; cursor; cursor = cursor->next)
1811 tmp2 = g_strdup_printf (
"%s %s,", tmp1, tmp3 ? tmp3 :
"");
1817 tmp2 = g_strdup_printf (
"%s ]", tmp1);
1824 kvp_frame_to_bare_string_helper (gpointer key __attribute__ ((unused)),
1825 gpointer value, gpointer data)
1827 gchar **str = (gchar **) data;
1829 g_strdup_printf (
"%s",
1840 g_return_val_if_fail (val, NULL);
1841 tmp1 = g_strdup (
"");
1842 switch (kvp_value_get_type (val))
1846 return g_strdup_printf (
"%" G_GINT64_FORMAT,
1852 return g_strdup_printf (
"(%g)", kvp_value_get_double (val));
1858 tmp2 = g_strdup_printf (
"%s", tmp1 ? tmp1 :
"");
1866 return g_strdup_printf (
"%s", tmp1 ? tmp1 :
"");
1872 tmp2 = g_strdup_printf (
"%s", ctmp ? ctmp :
"");
1877 return (kvp_value_get_boolean (val)) ?
"TRUE" :
"FALSE";
1883 tmp1 = binary_to_string (data, len);
1884 return g_strdup_printf (
"%s", tmp1 ? tmp1 :
"");
1891 tmp2 = g_strdup_printf (
"%s", tmp1 ? tmp1 :
"");
1903 tmp1 = g_strdup (
"");
1904 g_hash_table_foreach (frame->hash,
1905 kvp_frame_to_bare_string_helper, &tmp1);
1911 return g_strdup_printf (
" ");
1923 g_return_val_if_fail (val, NULL);
1925 switch (kvp_value_get_type (val))
1929 return g_strdup_printf (
"KVP_VALUE_GINT64(%" G_GINT64_FORMAT
")",
1935 return g_strdup_printf (
"KVP_VALUE_DOUBLE(%g)",
1936 kvp_value_get_double (val));
1942 tmp2 = g_strdup_printf (
"KVP_VALUE_NUMERIC(%s)", tmp1 ? tmp1 :
"");
1950 return g_strdup_printf (
"KVP_VALUE_STRING(%s)", tmp1 ? tmp1 :
"");
1957 tmp2 = g_strdup_printf (
"KVP_VALUE_GUID(%s)", ctmp ? ctmp :
"");
1966 tmp1 = binary_to_string (data, len);
1967 return g_strdup_printf (
"KVP_VALUE_BINARY(%s)",
1974 tmp2 = g_strdup_printf (
"KVP_VALUE_GLIST(%s)", tmp1 ? tmp1 :
"");
1982 tmp2 = g_strdup_printf (
"KVP_VALUE_FRAME(%s)", tmp1 ? tmp1 :
"");
1988 return g_strdup_printf (
" ");
1994 kvp_frame_to_string_helper (gpointer key, gpointer value, gpointer data)
1997 gchar **str = (gchar **) data;
1998 gchar *old_data = *str;
2002 *str = g_strdup_printf (
"%s %s => %s,\n",
2003 *str ? *str :
"", key ? (gchar *) key :
"", tmp_val ? tmp_val :
"");
2010 kvp_frame_to_string (
const KvpFrame * frame)
2014 g_return_val_if_fail (frame != NULL, NULL);
2016 tmp1 = g_strdup_printf (
"{\n");
2019 g_hash_table_foreach (frame->hash, kvp_frame_to_string_helper,
2023 tmp2 = g_strdup_printf (
"%s}\n", tmp1);
2032 kvp_frame_get_hash (
const KvpFrame * frame)
2034 g_return_val_if_fail (frame != NULL, NULL);
GUID * kvp_value_get_guid(const KvpValue *value)
KvpFrame * kvp_frame_get_frame_path(KvpFrame *frame, const gchar *key,...)
#define PERR(format, args...)
void kvp_frame_add_time(KvpFrame *frame, const gchar *path, QofTime *qt)
Add the value of the QofTime to the glist bag.
gint qof_numeric_compare(QofNumeric a, QofNumeric b)
GList * kvp_value_replace_glist_nc(KvpValue *value, GList *newlist)
GList * kvp_glist_copy(const GList *list)
void kvp_frame_set_guid(KvpFrame *frame, const gchar *path, const GUID *guid)
Store a copy of the GUID at the indicated path.
KvpValueType
possible types in the union KvpValue
void kvp_frame_set_numeric(KvpFrame *frame, const gchar *path, QofNumeric nval)
store the value of the QofNumeric at the indicated path.
void kvp_frame_set_frame_nc(KvpFrame *frame, const gchar *path, KvpFrame *fr)
Store a KvpFrame at the indicated path without copying.
void kvp_frame_set_time(KvpFrame *frame, const gchar *path, QofTime *qt)
Store a copy of the QofTime at the indicated path.
KvpFrame * kvp_frame_add_value(KvpFrame *frame, const gchar *path, KvpValue *value)
Add a copy of the value to the glist bag.
void kvp_frame_add_frame_nc(KvpFrame *frame, const gchar *path, KvpFrame *fr)
Add the frame to the glist bag without copying.
gint kvp_frame_compare(const KvpFrame *fa, const KvpFrame *fb)
KvpFrame * kvp_frame_get_frame_slash(KvpFrame *frame, const gchar *key_path)
KvpFrame * kvp_frame_copy(const KvpFrame *frame)
struct _KvpFrame KvpFrame
void kvp_frame_set_slot_path(KvpFrame *frame, const KvpValue *new_value, const gchar *first_key,...)
gint kvp_glist_compare(const GList *list1, const GList *list2)
void kvp_frame_set_gint64(KvpFrame *frame, const gchar *path, gint64 ival)
store the value of the gint64 at the indicated path.
KvpValue * kvp_value_new_boolean(gboolean value)
gboolean kvp_frame_is_empty(KvpFrame *frame)
#define LEAVE(format, args...)
KvpValue * kvp_value_new_frame_nc(KvpFrame *value)
void kvp_frame_set_slot_path_gslist(KvpFrame *frame, const KvpValue *new_value, GSList *key_path)
KvpFrame * kvp_frame_get_frame_gslist(KvpFrame *frame, GSList *key_path)
KvpFrame * kvp_frame_set_value(KvpFrame *frame, const gchar *key_path, const KvpValue *value)
Copy the KvpValue into the frame.
void * kvp_value_get_binary(const KvpValue *value, guint64 *size_return)
128bit denominator/numerator maths.
void kvp_frame_add_url_encoding(KvpFrame *frame, const gchar *enc)
void kvp_frame_delete(KvpFrame *frame)
gint64 kvp_value_get_gint64(const KvpValue *value)
KvpValue * kvp_frame_replace_value_nc(KvpFrame *frame, const gchar *key_path, KvpValue *new_value)
void kvp_frame_set_frame(KvpFrame *frame, const gchar *path, KvpFrame *fr)
Store a copy of the KvpFrame at the indicated path.
void(* KvpValueForeachCB)(const gchar *key, KvpValue *value, gpointer data)
struct _KvpValue KvpValue
KvpValue * kvp_frame_replace_slot_nc(KvpFrame *frame, const gchar *slot, KvpValue *new_value)
gpointer qof_util_string_cache_insert(gconstpointer key)
void kvp_frame_set_slot(KvpFrame *frame, const gchar *slot, const KvpValue *value)
void qof_util_string_cache_remove(gconstpointer key)
KvpValue * kvp_value_copy(const KvpValue *value)
const char * guid_to_string(const GUID *guid)
gint qof_time_cmp(const QofTime *ta, const QofTime *tb)
KvpValue * kvp_value_new_binary_nc(void *data, guint64 datasize)
void kvp_frame_add_double(KvpFrame *frame, const gchar *path, gdouble dval)
Add the value of the double to the glist bag.
void kvp_frame_set_slot_nc(KvpFrame *frame, const gchar *slot, KvpValue *value)
void kvp_frame_set_boolean(KvpFrame *frame, const gchar *path, gboolean val)
Store the value of the boolean at the indicated path.
GList * kvp_value_get_glist(const KvpValue *value)
gchar * kvp_value_to_bare_string(const KvpValue *val)
General purpose function to convert any KvpValue to a string.
KvpFrame * kvp_value_replace_frame_nc(KvpValue *value, KvpFrame *newframe)
void kvp_glist_delete(GList *list)
gchar * kvp_value_get_string(const KvpValue *value)
void kvp_frame_add_frame(KvpFrame *frame, const gchar *path, KvpFrame *fr)
Copy the frame to the glist bag at the indicated path.
void kvp_frame_add_string(KvpFrame *frame, const gchar *path, const gchar *str)
Copy the string to the glist bag at the indicated path.
KvpValue * kvp_frame_get_slot_path(KvpFrame *frame, const gchar *first_key,...)
KvpFrame * kvp_frame_set_value_nc(KvpFrame *frame, const gchar *key_path, KvpValue *value)
Store the KvpValue in the frame without copying.
void kvp_frame_for_each_slot(KvpFrame *f, KvpValueForeachCB proc, gpointer data)
gchar * qof_numeric_to_string(QofNumeric n)
KvpValue * kvp_value_new_glist(const GList *value)
KvpValue * kvp_value_new_glist_nc(GList *value)
struct QofTime64 QofTime
Use a 64-bit signed int QofTime.
void kvp_frame_add_gint64(KvpFrame *frame, const gchar *path, gint64 ival)
add the value of the gint64 to the glist bag
gint qof_util_double_compare(gdouble d1, gdouble d2)
Compare two gdouble values.
#define QOF_FATAL
general error value
static QofNumeric qof_numeric_zero(void)
void kvp_frame_set_double(KvpFrame *frame, const gchar *path, gdouble dval)
store the value of the double at the indicated path.
KvpFrame * kvp_frame_new(void)
KvpFrame * kvp_value_get_frame(const KvpValue *value)
KvpFrame * kvp_frame_get_frame(const KvpFrame *frame, const gchar *path)
void kvp_value_delete(KvpValue *value)
KvpValue * kvp_frame_get_slot_path_gslist(KvpFrame *frame, GSList *key_path)
gint kvp_value_compare(const KvpValue *kva, const KvpValue *kvb)
#define ENTER(format, args...)
gchar * kvp_value_to_string(const KvpValue *val)
Debug version.
const gchar * QofLogModule
void kvp_frame_set_string(KvpFrame *frame, const gchar *path, const gchar *str)
Store a copy of the string at the indicated path.
void kvp_frame_add_numeric(KvpFrame *frame, const gchar *path, QofNumeric nval)
Add the value of the QofNumeric to the glist bag.
64bit time/date handling.
void kvp_frame_add_guid(KvpFrame *frame, const gchar *path, const GUID *guid)
Copy the GUID to the glist bag at the indicated path.