summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNeil Roberts <neil@linux.intel.com>2011-11-04 16:21:28 +0000
committerNeil Roberts <neil@linux.intel.com>2011-11-16 16:32:11 +0000
commit436a7a45da0298f72d5b839601c60a5d23108a8a (patch)
tree1f3780f956cabdb1b9d2f76f3601284b8038acb5
parent7068849ae627367fa0ec81894d446b642b9e9bd6 (diff)
downloadcogl-436a7a45da0298f72d5b839601c60a5d23108a8a.tar.gz
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>
-rw-r--r--cogl/cogl-boxed-value.c34
-rw-r--r--cogl/cogl-boxed-value.h11
2 files changed, 45 insertions, 0 deletions
diff --git a/cogl/cogl-boxed-value.c b/cogl/cogl-boxed-value.c
index 47f375a3..b2cb3f32 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 dada36f2..d9dd45a0 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);