commit 5a90e5071b7981ee82146989272cd1c382c5431f
parent 04a54103593f5de0d826fee23d370f03002d4547
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date: Tue, 5 Jul 2016 14:52:31 +0200
API Fix: needed an arg to return value.
Diffstat:
4 files changed, 39 insertions(+), 24 deletions(-)
diff --git a/src/ssp.h b/src/ssp.h
@@ -602,13 +602,17 @@ SSP_API res_T
ssp_ran_gaussian_ref_put
(struct ssp_ran_gaussian* ran);
-SSP_API double
+SSP_API res_T
ssp_ran_gaussian_get
- (const struct ssp_ran_gaussian* ran, struct ssp_rng* rng);
+ (const struct ssp_ran_gaussian* ran,
+ struct ssp_rng* rng,
+ double* res);
-SSP_API double
+SSP_API res_T
ssp_distribution_gaussian_pdf
- (const struct ssp_ran_gaussian* ran, double x);
+ (const struct ssp_ran_gaussian* ran,
+ double x,
+ double* res);
/*******************************************************************************
* Piecewise linear distribution
@@ -634,9 +638,11 @@ SSP_API res_T
ssp_ran_piecewise_linear_ref_put
(struct ssp_ran_piecewise_linear* ran);
-SSP_API double
+SSP_API res_T
ssp_ran_piecewise_linear_get
- (const struct ssp_ran_piecewise_linear *ran, struct ssp_rng* rng);
+ (const struct ssp_ran_piecewise_linear *ran,
+ struct ssp_rng* rng,
+ double *res);
END_DECLS
diff --git a/src/ssp_distributions.cpp b/src/ssp_distributions.cpp
@@ -144,22 +144,24 @@ ssp_ran_gaussian_ref_put
return RES_OK;
}
-double
+res_T
ssp_ran_gaussian_get
- (const struct ssp_ran_gaussian *ran, struct ssp_rng* rng)
+ (const struct ssp_ran_gaussian *ran, struct ssp_rng* rng, double* res)
{
- if(!ran || !rng) return RES_BAD_ARG;
+ if(!ran || !rng || !res) return RES_BAD_ARG;
class rng_cxx r(*rng);
- return ran->state->distrib->operator()(r);
+ *res = ran->state->distrib->operator()(r);
+ return RES_OK;
}
-double
+res_T
ssp_ran_gaussian_pdf
- (const struct ssp_ran_gaussian *ran, double x)
+ (const struct ssp_ran_gaussian *ran, double x, double* res)
{
- if(!ran) return RES_BAD_ARG;
+ if(!ran || !res) return RES_BAD_ARG;
const double tmp = (x - ran->state->mu) * ran->state->K1;
- return ran->state->K2 * exp(-0.5 * tmp * tmp);
+ *res = ran->state->K2 * exp(-0.5 * tmp * tmp);
+ return RES_OK;
}
/*******************************************************************************
@@ -245,11 +247,14 @@ ssp_ran_piecewise_linear_ref_put
return RES_OK;
}
-double
+res_T
ssp_ran_piecewise_linear_get
- (const struct ssp_ran_piecewise_linear *ran, struct ssp_rng* rng)
+ (const struct ssp_ran_piecewise_linear *ran,
+ struct ssp_rng* rng,
+ double* res)
{
- if(!ran || !rng) return RES_BAD_ARG;
+ if(!ran || !rng || !res) return RES_BAD_ARG;
class rng_cxx r(*rng);
- return ran->state->distrib->operator()(r);
+ *res = ran->state->distrib->operator()(r);
+ return RES_OK;
}
diff --git a/src/test_ssp_ran_gaussian.c b/src/test_ssp_ran_gaussian.c
@@ -71,12 +71,14 @@ main(int argc, char** argv)
CHECK(ssp_ran_gaussian_ref_put(NULL), RES_BAD_ARG);
CHECK(ssp_ran_gaussian_ref_put(gaussian), RES_OK);
- CHECK(ssp_ran_gaussian_get(NULL, rng), RES_BAD_ARG);
- CHECK(ssp_ran_gaussian_get(gaussian, NULL), RES_BAD_ARG);
+ CHECK(ssp_ran_gaussian_get(NULL, rng, &x), RES_BAD_ARG);
+ CHECK(ssp_ran_gaussian_get(gaussian, NULL, &x), RES_BAD_ARG);
+ CHECK(ssp_ran_gaussian_get(NULL, NULL, &x), RES_BAD_ARG);
time_current(&start);
for (i = 0; i < NBS; i++) {
- double _x = ssp_ran_gaussian_get(gaussian, rng);
+ double _x;
+ CHECK(ssp_ran_gaussian_get(gaussian, rng, &_x), RES_OK);
x += _x;
x2 += _x * _x;
}
diff --git a/src/test_ssp_ran_piecewise_linear.c b/src/test_ssp_ran_piecewise_linear.c
@@ -72,11 +72,13 @@ main(int argc, char** argv)
CHECK(ssp_ran_piecewise_linear_ref_put(NULL), RES_BAD_ARG);
CHECK(ssp_ran_piecewise_linear_ref_put(pwl), RES_OK);
- CHECK(ssp_ran_piecewise_linear_get(NULL, rng), RES_BAD_ARG);
- CHECK(ssp_ran_piecewise_linear_get(pwl, NULL), RES_BAD_ARG);
+ CHECK(ssp_ran_piecewise_linear_get(NULL, rng, &x), RES_BAD_ARG);
+ CHECK(ssp_ran_piecewise_linear_get(NULL, rng, &x), RES_BAD_ARG);
+ CHECK(ssp_ran_piecewise_linear_get(pwl, rng, NULL), RES_BAD_ARG);
for (i = 0; i < NBS; i++) {
- double _x = ssp_ran_piecewise_linear_get(pwl, rng);
+ double _x;
+ ssp_ran_piecewise_linear_get(pwl, rng, &_x);
CHECK(0 <= _x && _x <= 10, 1);
x += _x;
x2 += _x * _x;