[grilo] core: Add support for int64 values



commit 6b26ee202958c33968c6af76b08358ae50c21a14
Author: Bastien Nocera <hadess hadess net>
Date:   Wed Nov 26 16:26:27 2014 +0100

    core: Add support for int64 values
    
    https://bugzilla.gnome.org/show_bug.cgi?id=740761

 src/data/grl-data.c         |   79 +++++++++++++++++++++++++++++++++++++++++++
 src/data/grl-data.h         |    6 +++
 src/data/grl-related-keys.c |   52 ++++++++++++++++++++++++++++
 src/data/grl-related-keys.h |    7 ++++
 4 files changed, 144 insertions(+), 0 deletions(-)
---
diff --git a/src/data/grl-data.c b/src/data/grl-data.c
index 8e14f9e..b453694 100644
--- a/src/data/grl-data.c
+++ b/src/data/grl-data.c
@@ -565,6 +565,60 @@ grl_data_get_boxed (GrlData *data, GrlKeyID key)
 }
 
 /**
+ * grl_data_set_int64:
+ * @data: data to change
+ * @key: (type GrlKeyID): key to change or add
+ * @intvalue: the new value
+ *
+ * Sets the first int64 value associated with @key in @data. If @key already has a
+ * first value old value is replaced by the new one.
+ *
+ * Since: 0.2.12
+ **/
+void
+grl_data_set_int64 (GrlData *data, GrlKeyID key, gint64 intvalue)
+{
+  GValue value = { 0 };
+
+  g_return_if_fail (GRL_IS_DATA (data));
+  g_return_if_fail (key);
+
+  g_value_init (&value, G_TYPE_INT64);
+  g_value_set_int64 (&value, intvalue);
+  grl_data_set (data, key, &value);
+}
+
+/**
+ * grl_data_get_int64:
+ * @data: data to inspect
+ * @key: (type GrlKeyID): key to use
+ *
+ * Returns the first int64 value associated with @key from @data. If @key has no
+ * first value, or value is not a gint, or @key is not in data, then 0 is
+ * returned.
+ *
+ * Returns: int value associated with @key, or 0 in other case.
+ *
+ * Since: 0.2.12
+ **/
+gint64
+grl_data_get_int64 (GrlData *data, GrlKeyID key)
+{
+  const GValue *value;
+
+  g_return_val_if_fail (GRL_IS_DATA (data), 0);
+  g_return_val_if_fail (key, 0);
+
+  value = grl_data_get (data, key);
+
+  if (!value || !G_VALUE_HOLDS_INT64 (value)) {
+    return 0;
+  } else {
+    return g_value_get_int64 (value);
+  }
+}
+
+/**
  * grl_data_remove:
  * @data: data to change
  * @key: (type GrlKeyID): key to remove
@@ -843,6 +897,31 @@ grl_data_add_boxed (GrlData *data,
 }
 
 /**
+ * grl_data_add_int64:
+ * @data: data to append
+ * @key: (type GrlKeyID): key to append
+ * @intvalue: the new value
+ *
+ * Appends a new int64 value for @key in @data.
+ *
+ * Since: 0.2.12
+ **/
+void
+grl_data_add_int64 (GrlData *data,
+                    GrlKeyID key,
+                    gint64 intvalue)
+{
+  GrlRelatedKeys *relkeys;
+
+  g_return_if_fail (GRL_IS_DATA (data));
+  g_return_if_fail (key);
+
+  relkeys = grl_related_keys_new ();
+  grl_related_keys_set_int64 (relkeys, key, intvalue);
+  grl_data_add_related_keys (data, relkeys);
+}
+
+/**
  * grl_data_length:
  * @data: a data
  * @key: a metadata key
diff --git a/src/data/grl-data.h b/src/data/grl-data.h
index 4ee69e6..be61b56 100644
--- a/src/data/grl-data.h
+++ b/src/data/grl-data.h
@@ -111,6 +111,8 @@ void grl_data_set_binary(GrlData *data, GrlKeyID key, const guint8 *buf, gsize s
 
 void grl_data_set_boxed (GrlData *data, GrlKeyID key, gconstpointer boxed);
 
+void grl_data_set_int64 (GrlData *data, GrlKeyID key, gint64 intvalue);
+
 const GValue *grl_data_get (GrlData *data, GrlKeyID key);
 
 const gchar *grl_data_get_string (GrlData *data, GrlKeyID key);
@@ -125,6 +127,8 @@ const guint8 *grl_data_get_binary(GrlData *data, GrlKeyID key, gsize *size);
 
 gpointer grl_data_get_boxed (GrlData *data, GrlKeyID key);
 
+gint64 grl_data_get_int64 (GrlData *data, GrlKeyID key);
+
 void grl_data_remove (GrlData *data, GrlKeyID key);
 
 gboolean grl_data_has_key (GrlData *data, GrlKeyID key);
@@ -143,6 +147,8 @@ void grl_data_add_binary (GrlData *data, GrlKeyID key, const guint8 *buf, gsize
 
 void grl_data_add_boxed (GrlData *data, GrlKeyID key, gconstpointer boxed);
 
+void grl_data_add_int64 (GrlData *data, GrlKeyID key, gint64 intvalue);
+
 guint grl_data_length (GrlData *data, GrlKeyID key);
 
 GrlRelatedKeys *grl_data_get_related_keys (GrlData *data, GrlKeyID key, guint index);
diff --git a/src/data/grl-related-keys.c b/src/data/grl-related-keys.c
index d6e1d61..2bde3c0 100644
--- a/src/data/grl-related-keys.c
+++ b/src/data/grl-related-keys.c
@@ -617,6 +617,58 @@ grl_related_keys_get_boxed (GrlRelatedKeys *relkeys,
 }
 
 /**
+ * grl_related_keys_set_int64:
+ * @relkeys: set of related keys to change
+ * @key: (type GrlKeyID): key to change or add
+ * @intvalue: the new value
+ *
+ * Sets the value associated with @key into @relkeys. @key must have been
+ * registered as a int64-type key. Old value is replaced by the new one.
+ *
+ * Since: 0.2.12
+ **/
+void
+grl_related_keys_set_int64 (GrlRelatedKeys *relkeys,
+                            GrlKeyID key,
+                            gint64 intvalue)
+{
+  GValue value = { 0 };
+  g_return_if_fail (GRL_IS_RELATED_KEYS (relkeys));
+  g_value_init (&value, G_TYPE_INT64);
+  g_value_set_int64 (&value, intvalue);
+  grl_related_keys_set (relkeys, key, &value);
+}
+
+/**
+ * grl_related_keys_get_int64:
+ * @relkeys: set of related keys to inspect
+ * @key: (type GrlKeyID): key to use
+ *
+ * Returns the value associated with @key from @relkeys. If @key has no value,
+ * or value is not a gint64, or @key is not in @relkeys, then 0 is returned.
+ *
+ * Returns: int64 value associated with @key, or 0 in other case.
+ *
+ * Since: 0.2.12
+ **/
+gint64
+grl_related_keys_get_int64 (GrlRelatedKeys *relkeys,
+                            GrlKeyID key)
+{
+  const GValue *value;
+
+  g_return_val_if_fail (GRL_IS_RELATED_KEYS (relkeys), 0);
+
+  value = grl_related_keys_get (relkeys, key);
+
+  if (!value || !G_VALUE_HOLDS_INT64 (value)) {
+    return 0;
+  } else {
+    return g_value_get_int64 (value);
+  }
+}
+
+/**
  * grl_related_keys_remove:
  * @relkeys: set of related keys
  * @key: (type GrlKeyID): key to remove
diff --git a/src/data/grl-related-keys.h b/src/data/grl-related-keys.h
index 7296cf4..5fb200a 100644
--- a/src/data/grl-related-keys.h
+++ b/src/data/grl-related-keys.h
@@ -126,6 +126,10 @@ void grl_related_keys_set_boxed (GrlRelatedKeys *relkeys,
                                  GrlKeyID key,
                                  gconstpointer boxed);
 
+void grl_related_keys_set_int64 (GrlRelatedKeys *relkeys,
+                                 GrlKeyID key,
+                                 gint64 intvalue);
+
 const GValue *grl_related_keys_get (GrlRelatedKeys *relkeys,
                                     GrlKeyID key);
 
@@ -148,6 +152,9 @@ const guint8 *grl_related_keys_get_binary(GrlRelatedKeys *relkeys,
 gconstpointer grl_related_keys_get_boxed (GrlRelatedKeys *relkeys,
                                           GrlKeyID key);
 
+gint64 grl_related_keys_get_int64 (GrlRelatedKeys *relkeys,
+                                   GrlKeyID key);
+
 void grl_related_keys_remove (GrlRelatedKeys *relkeys,
                               GrlKeyID key);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]