Added gst_data_needs_copy_on_write()
authorDavid Schleef <ds@schleef.org>
Tue, 19 Nov 2002 02:29:18 +0000 (02:29 +0000)
committerDavid Schleef <ds@schleef.org>
Tue, 19 Nov 2002 02:29:18 +0000 (02:29 +0000)
Original commit message from CVS:
Added gst_data_needs_copy_on_write()

gst/gstdata.c
gst/gstdata.h

index 72d01e8..afc99e2 100644 (file)
@@ -93,6 +93,26 @@ gst_data_copy (const GstData *data)
 }
 
 /**
+ * gst_data_needs_copy_on_write:
+ * @data: a #GstData to copy
+ *
+ * Returns: TRUE if the given #GstData is potentially shared and needs to
+ * be copied before it can be modified safely.
+ */
+gboolean
+gst_data_needs_copy_on_write (GstData *data) 
+{
+  gint refcount;
+
+  GST_ATOMIC_INT_READ (&data->refcount, &refcount);
+
+  if (refcount == 1 && !GST_DATA_FLAG_IS_SET (data, GST_DATA_READONLY))
+    return FALSE;
+
+  return TRUE;
+}
+
+/**
  * gst_data_copy_on_write:
  * @data: a #GstData to copy
  *
index 20b85ba..0a17e23 100644 (file)
@@ -87,6 +87,7 @@ void                  gst_data_copy_into              (const GstData *data, GstData *target);
 
 /* basic operations on data */
 GstData*               gst_data_copy                   (const GstData *data);
+gboolean               gst_data_needs_copy_on_write    (GstData *data);
 GstData*               gst_data_copy_on_write          (GstData *data);
 void                   gst_data_free                   (GstData *data);