Skip to content

Commit bdf0995

Browse files
committed
Adding API for simple and rule based controls
1 parent a937bd4 commit bdf0995

1 file changed

Lines changed: 52 additions & 29 deletions

File tree

toolkit/epanet/toolkit/toolkit.i

Lines changed: 52 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
/*
22
* epanet_toolkit.i - SWIG interface description file for EPANET toolkit
3-
*
3+
*
44
* Created: 11/27/2017
55
* Author: Michael E. Tryby
66
* US EPA - ORD/NRMRL
7-
*
8-
* Build command:
7+
*
8+
* Build command:
99
* $ swig -I../include -python -py3 epanet_toolkit.i
1010
*
11-
*/
11+
*/
1212

1313
%module(package="epanet") toolkit
1414

1515

1616
%include "typemaps.i"
1717
%include "cstring.i"
18-
19-
18+
19+
2020
%{
2121
#include "epanet_py.h"
2222

@@ -47,7 +47,7 @@ and return a (possibly) different pointer */
4747
%typemap(argout) Handle *ph_out, Handle *ph_inout {
4848
/* OUTPUT argout */
4949
%append_output(SWIG_NewPointerObj(SWIG_as_voidptr(retval$argnum), $1_descriptor, 0));
50-
}
50+
}
5151
%typemap(in) Handle *ph_inout (Handle retval) {
5252
/* INOUT in */
5353
SWIG_ConvertPtr(obj0,SWIG_as_voidptrptr(&retval), 0, 0);
@@ -68,23 +68,23 @@ and return a (possibly) different pointer */
6868
if (PyObject_HasAttrString($input,"value")) {
6969
PyObject* o;
7070
o = PyObject_GetAttrString($input, "value");
71-
ecode = SWIG_AsVal_int(o, &val);
72-
}
71+
ecode = SWIG_AsVal_int(o, &val);
72+
}
7373
else {
74-
SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "$symname" "', argument " "$argnum"" of type '" "$ltype""'");
75-
}
76-
74+
SWIG_exception_fail(SWIG_ArgError(ecode), "in method '" "$symname" "', argument " "$argnum"" of type '" "$ltype""'");
75+
}
76+
7777
$1 = ($1_type)(val);
7878
}
79-
%apply EnumeratedType {EN_NodeProperty, EN_LinkProperty, EN_TimeProperty,
79+
%apply EnumeratedType {EN_NodeProperty, EN_LinkProperty, EN_TimeProperty,
8080
EN_AnalysisStatistic, EN_CountType, EN_NodeType, EN_LinkType, EN_QualityType,
81-
EN_SourceType, EN_HeadLossType, EN_FlowUnits, EN_DemandModel, EN_Option,
81+
EN_SourceType, EN_HeadLossType, EN_FlowUnits, EN_DemandModel, EN_Option,
8282
EN_ControlType, EN_StatisticType, EN_MixingModel, EN_SaveOption, EN_PumpType,
83-
EN_CurveType, EN_ActionCodeType, EN_RuleObject, EN_RuleVariable,
83+
EN_CurveType, EN_ActionCodeType, EN_RuleObject, EN_RuleVariable,
8484
EN_RuleOperator, EN_RuleStatus, EN_StatusReport};
8585

8686

87-
/* MARK FUNCTIONS AS ALLOCATING AND DEALLOCATING MEMORY */
87+
/* MARK FUNCTIONS AS ALLOCATING AND DEALLOCATING MEMORY */
8888
%newobject proj_create;
8989
%delobject proj_delete;
9090

@@ -95,15 +95,16 @@ and return a (possibly) different pointer */
9595

9696
/* MACRO FOR RETURNING A BOUNDED LENGTH STRING */
9797
%cstring_bounded_output(char *id_out, EN_MAXID);
98+
%cstring_bounded_output(char *msg_out, EN_MAXMSG);
9899

99100

100101
/* INSERTS CUSTOM EXCEPTION HANDLING IN WRAPPER */
101102
%exception
102103
{
103104
char* err_msg;
104-
105+
105106
err_clear(arg1);
106-
107+
107108
$function
108109
if (err_check(arg1, &err_msg))
109110
{
@@ -158,8 +159,8 @@ int anlys_getflowunits(Handle ph, int *OUTPUT);
158159
int anlys_setflowunits(Handle ph, EN_FlowUnits code);
159160
int anlys_gettimeparam(Handle ph, EN_TimeProperty code, long *OUTPUT);
160161
int anlys_settimeparam(Handle ph, EN_TimeProperty code, long value);
161-
int anlys_getqualinfo(Handle ph, EN_QualityType *qualcode, char *chemname, char *chemunits, int *tracenode);
162-
int anlys_getqualtype(Handle ph, EN_QualityType *qualcode, int *tracenode);
162+
int anlys_getqualinfo(Handle ph, int *OUTPUT, char *id_out, char *id_out, int *OUTPUT);
163+
int anlys_getqualtype(Handle ph, int *OUTPUT, int *OUTPUT);
163164
int anlys_setqualtype(Handle ph, EN_QualityType qualcode, char *chemname, char *chemunits, char *tracenode);
164165

165166

@@ -175,14 +176,14 @@ int node_getcoord(Handle ph, int index, EN_API_FLOAT_TYPE *OUTPUT, EN_API_FLOAT_
175176
int node_setcoord(Handle ph, int index, EN_API_FLOAT_TYPE x, EN_API_FLOAT_TYPE y);
176177

177178

178-
int dmnd_getmodel(Handle ph, int *type, EN_API_FLOAT_TYPE *pmin, EN_API_FLOAT_TYPE *preq, EN_API_FLOAT_TYPE *pexp);
179+
int dmnd_getmodel(Handle ph, int *OUTPUT, EN_API_FLOAT_TYPE *OUTPUT, EN_API_FLOAT_TYPE *OUTPUT, EN_API_FLOAT_TYPE *OUTPUT);
179180
int dmnd_setmodel(Handle ph, int type, EN_API_FLOAT_TYPE pmin, EN_API_FLOAT_TYPE preq, EN_API_FLOAT_TYPE pexp);
180181
int dmnd_getcount(Handle ph, int nodeIndex, int *OUTPUT);
181182
int dmnd_getbase(Handle ph, int nodeIndex, int demandIndex, EN_API_FLOAT_TYPE *OUTPUT);
182183
int dmnd_setbase(Handle ph, int nodeIndex, int demandIndex, EN_API_FLOAT_TYPE baseDemand);
183184
int dmnd_getpattern(Handle ph, int nodeIndex, int demandIndex, int *OUTPUT);
184185
int dmnd_setpattern(Handle ph, int nodeIndex, int demandIndex, int patIndex);
185-
int dmnd_getname(Handle ph, int nodeIndex, int demandIdx, char *demandName);
186+
int dmnd_getname(Handle ph, int nodeIndex, int demandIdx, char *msg_out);
186187
int dmnd_setname(Handle ph, int nodeIndex, int demandIdx, char *demandName);
187188

188189

@@ -225,12 +226,34 @@ int curv_get(Handle ph, int curveIndex, char* id, int *nValues, EN_API_FLOAT_TYP
225226
int curv_set(Handle ph, int index, EN_API_FLOAT_TYPE *x, EN_API_FLOAT_TYPE *y, int len);
226227

227228

229+
int scntl_add(Handle ph, int *cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
230+
int scntl_delete(Handle ph, int index);
231+
int scntl_get(Handle ph, int controlIndex, int *controlType, int *linkIndex, EN_API_FLOAT_TYPE *setting, int *nodeIndex, EN_API_FLOAT_TYPE *level);
232+
int scntl_set(Handle ph, int cindex, int ctype, int lindex, EN_API_FLOAT_TYPE setting, int nindex, EN_API_FLOAT_TYPE level);
233+
234+
235+
int rcntl_add(Handle ph, char *rule);
236+
int rcntl_delete(Handle ph, int index);
237+
int rcntl_get(Handle ph, int index, int *nPremises, int *nThenActions, int *nElseActions, EN_API_FLOAT_TYPE *priority);
238+
int rcntl_getid(Handle ph, int index, char* id);
239+
int rcntl_getpremise(Handle ph, int ruleIndex, int premiseIndex, int *logop, int *object, int *objIndex, int *variable, int *relop, int *status, EN_API_FLOAT_TYPE *value);
240+
int rcntl_setpremise(Handle ph, int ruleIndex, int premiseIndex, int logop, int object, int objIndex, int variable, int relop, int status, EN_API_FLOAT_TYPE value);
241+
int rcntl_setpremiseindex(Handle ph, int ruleIndex, int premiseIndex, int objIndex);
242+
int rcntl_setpremisestatus(Handle ph, int ruleIndex, int premiseIndex, int status);
243+
int rcntl_setpremisevalue(Handle ph, int ruleIndex, int premiseIndex, EN_API_FLOAT_TYPE value);
244+
int rcntl_getthenaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, EN_API_FLOAT_TYPE *setting);
245+
int rcntl_setthenaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, EN_API_FLOAT_TYPE setting);
246+
int rcntl_getelseaction(Handle ph, int ruleIndex, int actionIndex, int *linkIndex, int *status, EN_API_FLOAT_TYPE *setting);
247+
int rcntl_setelseaction(Handle ph, int ruleIndex, int actionIndex, int linkIndex, int status, EN_API_FLOAT_TYPE setting);
248+
int rcntl_setrulepriority(Handle ph, int index, EN_API_FLOAT_TYPE priority);
249+
250+
228251
int toolkit_getversion(int *int_out);
229252

230253

231254
%exception;
232255

233-
/* NO EXCEPTION HANDLING FOR THESE FUNCTIONS */
256+
/* NO EXCEPTION HANDLING FOR THESE FUNCTIONS */
234257

235258
int proj_create(Handle *ph_out);
236259
int proj_delete(Handle *ph_inout);
@@ -325,15 +348,15 @@ class AnalysisStatistic(enum.Enum):
325348
MAXHEADERROR = EN_MAXHEADERROR
326349
MAXFLOWCHANGE = EN_MAXFLOWCHANGE
327350
MASSBALANCE = EN_MASSBALANCE
328-
351+
329352

330353
class CountType(enum.Enum):
331354
NODES = EN_NODECOUNT
332355
TANKS = EN_TANKCOUNT
333356
LINKS = EN_LINKCOUNT
334357
PTRNS = EN_PATCOUNT
335358
CURVS = EN_CURVECOUNT
336-
CTRLS = EN_CONTROLCOUNT
359+
CNTLS = EN_CONTROLCOUNT
337360
RULES = EN_RULECOUNT
338361

339362

@@ -455,7 +478,7 @@ class ActionCode(enum.Enum):
455478

456479

457480
class RuleObject(enum.Enum):
458-
R_NODE = EN_R_NODE
481+
R_NODE = EN_R_NODE
459482
R_LINK = EN_R_LINK
460483
R_SYSTEM = EN_R_SYSTEM
461484

@@ -468,9 +491,9 @@ class RuleVariable(enum.Enum):
468491
R_PRESSURE = EN_R_PRESSURE
469492
R_FLOW = EN_R_FLOW
470493
R_STATUS = EN_R_STATUS
471-
R_SETTING = EN_R_SETTING
494+
R_SETTING = EN_R_SETTING
472495
R_POWER = EN_R_POWER
473-
R_TIME = EN_R_TIME
496+
R_TIME = EN_R_TIME
474497
R_CLOCKTIME = EN_R_CLOCKTIME
475498
R_FILLTIME = EN_R_FILLTIME
476499
R_DRAINTIME = EN_R_DRAINTIME
@@ -481,7 +504,7 @@ class RuleOperator(enum.Enum):
481504
R_NE = EN_R_NE
482505
R_LE = EN_R_LE
483506
R_GE = EN_R_GE
484-
R_LT = EN_R_LT
507+
R_LT = EN_R_LT
485508
R_GT = EN_R_GT
486509
R_IS = EN_R_IS
487510
R_NOT = EN_R_NOT

0 commit comments

Comments
 (0)