summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2014-11-17 21:13:54 +0000
committerRichard Hughes <richard@hughsie.com>2014-11-17 21:13:54 +0000
commit6bb42e40891f7a572e75d98237d8b5ac208cf104 (patch)
tree79ebad5f537f5018b17b58ab5a2a69ce6301b675 /lib
parent826e1d81a5daa21506583767b95c81546f24d725 (diff)
downloadcolord-6bb42e40891f7a572e75d98237d8b5ac208cf104.tar.gz
libcolord: Add cd_spectrum_set_value()
Sometimes we just want to overwrite the spectral data without duplicating.
Diffstat (limited to 'lib')
-rw-r--r--lib/colord/cd-spectrum.c18
-rw-r--r--lib/colord/cd-spectrum.h3
-rw-r--r--lib/colord/cd-test-private.c4
3 files changed, 25 insertions, 0 deletions
diff --git a/lib/colord/cd-spectrum.c b/lib/colord/cd-spectrum.c
index 5623c2a..2865e3e 100644
--- a/lib/colord/cd-spectrum.c
+++ b/lib/colord/cd-spectrum.c
@@ -110,6 +110,24 @@ cd_spectrum_get_value (const CdSpectrum *spectrum, guint idx)
}
/**
+ * cd_spectrum_set_value:
+ * @spectrum: a #CdSpectrum instance.
+ * @idx: an index into the data
+ * @data: a data value
+ *
+ * Overwrites the spectrum data at a specified index.
+ *
+ * Since: 1.2.6
+ **/
+void
+cd_spectrum_set_value (CdSpectrum *spectrum, guint idx, gdouble data)
+{
+ g_return_if_fail (spectrum != NULL);
+ g_return_if_fail (idx < spectrum->data->len);
+ g_array_index (spectrum->data, gdouble, idx) = data / spectrum->norm;
+}
+
+/**
* cd_spectrum_get_value_raw:
* @spectrum: a #CdSpectrum instance.
* @idx: an index into the data
diff --git a/lib/colord/cd-spectrum.h b/lib/colord/cd-spectrum.h
index f9a7308..1885d62 100644
--- a/lib/colord/cd-spectrum.h
+++ b/lib/colord/cd-spectrum.h
@@ -72,6 +72,9 @@ void cd_spectrum_set_end (CdSpectrum *spectrum,
gdouble end);
void cd_spectrum_set_norm (CdSpectrum *spectrum,
gdouble norm);
+void cd_spectrum_set_value (CdSpectrum *spectrum,
+ guint idx,
+ gdouble data);
void cd_spectrum_add_value (CdSpectrum *spectrum,
gdouble data);
CdSpectrum *cd_spectrum_multiply (CdSpectrum *s1,
diff --git a/lib/colord/cd-test-private.c b/lib/colord/cd-test-private.c
index ac3c08b..337aed2 100644
--- a/lib/colord/cd-test-private.c
+++ b/lib/colord/cd-test-private.c
@@ -249,6 +249,10 @@ colord_spectrum_func (void)
g_assert_cmpfloat (ABS (cd_spectrum_get_value_raw (s, 1) - 0.75f), <, 0.001f);
g_assert_cmpfloat (ABS (cd_spectrum_get_value_raw (s, 2) - 1.f), <, 0.001f);
+ /* test setting of data */
+ cd_spectrum_set_value (s, 0, 10.f);
+ g_assert_cmpfloat (ABS (cd_spectrum_get_value (s, 0) - 10.0f), <, 0.001f);
+
cd_spectrum_free (s);
}