diff options
author | Neil Roberts <neil@linux.intel.com> | 2011-11-04 16:21:28 +0000 |
---|---|---|
committer | Neil Roberts <neil@linux.intel.com> | 2011-11-16 16:32:11 +0000 |
commit | 436a7a45da0298f72d5b839601c60a5d23108a8a (patch) | |
tree | 1f3780f956cabdb1b9d2f76f3601284b8038acb5 | |
parent | 7068849ae627367fa0ec81894d446b642b9e9bd6 (diff) | |
download | cogl-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.c | 34 | ||||
-rw-r--r-- | 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 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); |