diff --git a/include/epanet2.h b/include/epanet2.h index 38448da..2bbc94f 100644 --- a/include/epanet2.h +++ b/include/epanet2.h @@ -343,7 +343,7 @@ extern "C" { EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y); int DLLEXPORT ENgetcurve(int index, char* id, int *nPoints, - EN_API_FLOAT_TYPE **xValues, EN_API_FLOAT_TYPE **yValues); + EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues); int DLLEXPORT ENsetcurve(int index, EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues, int nPoints); diff --git a/include/epanet2_2.h b/include/epanet2_2.h index c7774d3..f6ad002 100644 --- a/include/epanet2_2.h +++ b/include/epanet2_2.h @@ -1422,7 +1422,7 @@ typedef struct Project *EN_Project; @ref EN_MAXID characters. */ int DLLEXPORT EN_getcurve(EN_Project ph, int index, char* id, int *nPoints, - double **xValues, double **yValues); + double *xValues, double *yValues); /** @brief assigns a set of data points to a curve. diff --git a/include/epanet_py.h b/include/epanet_py.h index e708756..a559d6e 100644 --- a/include/epanet_py.h +++ b/include/epanet_py.h @@ -139,7 +139,7 @@ int EXPORT_PY_API curv_getlength(Handle ph, int index, int *len); int EXPORT_PY_API curv_gettype(Handle ph, int curveIndex, int *outType); int EXPORT_PY_API curv_getvalue(Handle ph, int curveIndex, int pointIndex, double *x, double *y); int EXPORT_PY_API curv_setvalue(Handle ph, int curveIndex, int pointIndex, double x, double y); -int EXPORT_PY_API curv_get(Handle ph, int curveIndex, char* id, int *nValues, double **xValues, double **yValues); +int EXPORT_PY_API curv_get(Handle ph, int curveIndex, char* id, int *nValues, double *xValues, double *yValues); int EXPORT_PY_API curv_set(Handle ph, int index, double *x, double *y, int len); int EXPORT_PY_API scntl_add(Handle ph, int type, int linkIndex, double setting, int nodeIndex, double level, int *index); diff --git a/src/epanet.c b/src/epanet.c index 8eb1ecf..8942f6e 100644 --- a/src/epanet.c +++ b/src/epanet.c @@ -4385,7 +4385,7 @@ int DLLEXPORT EN_setcurvevalue(EN_Project p, int curveIndex, int pointIndex, } int DLLEXPORT EN_getcurve(EN_Project p, int index, char *id, int *nPoints, - double **xValues, double **yValues) + double *xValues, double *yValues) /*---------------------------------------------------------------- ** Input: index = data curve index ** Output: id = ID name of data curve @@ -4410,8 +4410,8 @@ int DLLEXPORT EN_getcurve(EN_Project p, int index, char *id, int *nPoints, *nPoints = curve->Npts; for (i = 0; i < curve->Npts; i++) { - *xValues[i] = curve->X[i]; - *yValues[i] = curve->Y[i]; + xValues[i] = curve->X[i]; + yValues[i] = curve->Y[i]; } return 0; } diff --git a/src/epanet2.c b/src/epanet2.c index 935d6c4..6ebb278 100644 --- a/src/epanet2.c +++ b/src/epanet2.c @@ -645,7 +645,7 @@ int DLLEXPORT ENsetcurvevalue(int curveIndex, int pointIndex, EN_API_FLOAT_TYPE } int DLLEXPORT ENgetcurve(int index, char *id, int *nPoints, - EN_API_FLOAT_TYPE **xValues, EN_API_FLOAT_TYPE **yValues) + EN_API_FLOAT_TYPE *xValues, EN_API_FLOAT_TYPE *yValues) { int i; Network *net = &_defaultProject->network; @@ -657,8 +657,8 @@ int DLLEXPORT ENgetcurve(int index, char *id, int *nPoints, *nPoints = curve->Npts; for (i = 0; i < curve->Npts; i++) { - *xValues[i] = (EN_API_FLOAT_TYPE)curve->X[i]; - *yValues[i] = (EN_API_FLOAT_TYPE)curve->Y[i]; + xValues[i] = (EN_API_FLOAT_TYPE)curve->X[i]; + yValues[i] = (EN_API_FLOAT_TYPE)curve->Y[i]; } return 0; } diff --git a/src/epanet_py.c b/src/epanet_py.c index fb681aa..b1b315d 100644 --- a/src/epanet_py.c +++ b/src/epanet_py.c @@ -624,7 +624,7 @@ int EXPORT_PY_API curv_setvalue(Handle ph, int curveIndex, int pointIndex, doubl return set_error(pr->error, EN_setcurvevalue(pr->project, curveIndex, pointIndex, x, y)); } -int EXPORT_PY_API curv_get(Handle ph, int curveIndex, char* id, int *nValues, double **xValues, double **yValues) +int EXPORT_PY_API curv_get(Handle ph, int curveIndex, char* id, int *nValues, double *xValues, double *yValues) { handle_t *pr = (handle_t *)ph; return set_error(pr->error, EN_getcurve(pr->project, curveIndex, id, nValues, xValues, yValues)); diff --git a/tests/test_curve.cpp b/tests/test_curve.cpp index 941b473..12fd05d 100644 --- a/tests/test_curve.cpp +++ b/tests/test_curve.cpp @@ -35,6 +35,35 @@ BOOST_FIXTURE_TEST_CASE(test_curve_comments, FixtureOpenClose) error = EN_getcomment(ph, EN_CURVE, index, comment); BOOST_REQUIRE(error == 0); BOOST_CHECK(check_string(comment, (char *)"Curve 1")); + + // Test of EN_setcurve and EN_getcurve + int i; + char id1[] = "NewCurve"; + int n1 = 5; + double X1[] = {16.88889, 19.5, 22.13889, 25.94445, 33.33334}; + double Y1[] = {156.7, 146.5, 136.2, 117.9, 50.0}; + int n2; + double X2[5], Y2[5]; + char id2[EN_MAXID+1]; + + // Add data to a new curve + error = EN_addcurve(ph, id1); + BOOST_REQUIRE(error == 0); + error = EN_getcurveindex(ph, id1, &i); + BOOST_REQUIRE(error == 0); + error = EN_setcurve(ph, i, X1, Y1, n1); + BOOST_REQUIRE(error == 0); + + // Retrieve data from curve + error = EN_getcurve(ph, i, id2, &n2, X2, Y2); + BOOST_REQUIRE(error == 0); + BOOST_CHECK(check_string(id2, id1)); + BOOST_REQUIRE(n2 == n1); + for (i = 0; i < n1; i++) + { + BOOST_REQUIRE(X1[i] == X2[i]); + BOOST_REQUIRE(Y1[i] == Y2[i]); + } } BOOST_AUTO_TEST_SUITE_END()