[cogl] cogl-boxed-value: Add _cogl_boxed_value_copy



commit 436a7a45da0298f72d5b839601c60a5d23108a8a
Author: Neil Roberts <neil linux intel com>
Date:   Fri Nov 4 16:21:28 2011 +0000

    cogl-boxed-value: Add _cogl_boxed_value_copy
    
    This adds a function to copy one boxed value to another. It is assumed
    that the destination boxed value is totally initialised (so it won't
    try to free any memory in it).
    
    Reviewed-by: Robert Bragg <robert linux intel com>

 cogl/cogl-boxed-value.c |   34 ++++++++++++++++++++++++++++++++++
 cogl/cogl-boxed-value.h |   11 +++++++++++
 2 files changed, 45 insertions(+), 0 deletions(-)
---
diff --git a/cogl/cogl-boxed-value.c b/cogl/cogl-boxed-value.c
index 47f375a..b2cb3f3 100644
--- a/cogl/cogl-boxed-value.c
+++ b/cogl/cogl-boxed-value.c
@@ -202,6 +202,40 @@ _cogl_boxed_value_set_matrix (CoglBoxedValue *bv,
 }
 
 void
+_cogl_boxed_value_copy (CoglBoxedValue *dst,
+                        const CoglBoxedValue *src)
+{
+  *dst = *src;
+
+  if (src->count > 1)
+    {
+      switch (src->type)
+        {
+        case COGL_BOXED_NONE:
+          break;
+
+        case COGL_BOXED_INT:
+          dst->v.int_array = g_memdup (src->v.int_array,
+                                       src->size * src->count * sizeof (int));
+          break;
+
+        case COGL_BOXED_FLOAT:
+          dst->v.float_array = g_memdup (src->v.float_array,
+                                         src->size *
+                                         src->count *
+                                         sizeof (float));
+          break;
+
+        case COGL_BOXED_MATRIX:
+          dst->v.float_array = g_memdup (src->v.float_array,
+                                         src->size * src->size *
+                                         src->count * sizeof (float));
+          break;
+        }
+    }
+}
+
+void
 _cogl_boxed_value_destroy (CoglBoxedValue *bv)
 {
   if (bv->count > 1)
diff --git a/cogl/cogl-boxed-value.h b/cogl/cogl-boxed-value.h
index dada36f..d9dd45a 100644
--- a/cogl/cogl-boxed-value.h
+++ b/cogl/cogl-boxed-value.h
@@ -89,6 +89,17 @@ _cogl_boxed_value_set_matrix (CoglBoxedValue *bv,
                               gboolean transpose,
                               const float *value);
 
+/*
+ * _cogl_boxed_value_copy:
+ * @dst: The destination boxed value
+ * @src: The source boxed value
+ *
+ * This copies @src to @dst. It is assumed that @dst is initialised.
+ */
+void
+_cogl_boxed_value_copy (CoglBoxedValue *dst,
+                        const CoglBoxedValue *src);
+
 void
 _cogl_boxed_value_destroy (CoglBoxedValue *bv);
 



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