solstice-solver

Solver library of the solstice app
git clone git://git.meso-star.com/solstice-solver.git
Log | Files | Refs | README | LICENSE

commit 250a83909127c7e23dc906e797d050f60e69f9af
parent bbe9455fd031e8c8f9ff07c9d467a4d9a3c5a396
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri,  8 Jul 2016 11:19:12 +0200

Continue spectrum code.

Diffstat:
Msrc/ssol_spectrum.c | 21+++++++++++++++++++--
Msrc/ssol_spectrum_c.h | 4+++-
2 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/src/ssol_spectrum.c b/src/ssol_spectrum.c @@ -34,6 +34,8 @@ spectrum_release(ref_T* ref) spectrum = CONTAINER_OF(ref, struct ssol_spectrum, ref); dev = spectrum->dev; ASSERT(dev && dev->allocator); + darray_double_clear(&spectrum->frequencies); + darray_double_clear(&spectrum->intensities); MEM_RM(dev->allocator, spectrum); SSOL(device_ref_put(dev)); } @@ -61,6 +63,8 @@ ssol_spectrum_create SSOL(device_ref_get(dev)); spectrum->dev = dev; ref_init(&spectrum->ref); + darray_double_init(dev->allocator, &spectrum->frequencies); + darray_double_init(dev->allocator, &spectrum->intensities); exit: if (out_spectrum) *out_spectrum = spectrum; @@ -98,11 +102,24 @@ ssol_spectrum_setup const double* data, const size_t nwavelength) { + res_T res = RES_OK; if(!spectrum || nwavelength <= 0 || !wavelengths || !data) return RES_BAD_ARG; - /* TODO */ - return RES_OK; + + res = darray_double_reserve(&spectrum->frequencies, nwavelength); + if (res != RES_OK) return res; + + res = darray_double_reserve(&spectrum->intensities, nwavelength); + if (res != RES_OK) { + darray_double_clear(&spectrum->frequencies); + return res; + } + + memcpy(spectrum->frequencies.data, wavelengths, nwavelength * sizeof(double)); + memcpy(spectrum->intensities.data, data, nwavelength * sizeof(double)); + + return res; } diff --git a/src/ssol_spectrum_c.h b/src/ssol_spectrum_c.h @@ -17,9 +17,11 @@ #define SSOL_SPECTRUM_C_H #include <rsys/ref_count.h> -#include <rsys/list.h> +#include <rsys/dynamic_array_double.h> struct ssol_spectrum { + struct darray_double frequencies; + struct darray_double intensities; struct ssol_device* dev; ref_T ref; };