@@ -206,6 +206,40 @@ and return a (possibly) different pointer */
206206 Py_INCREF ($result);
207207}
208208
209+
210+ /* TYPEMAPS FOR FLOAT ARGUMENT AS RETURN VALUE */
211+ %typemap(in, numinputs=0 ) float * float_out (float temp) {
212+ $1 = &temp;
213+ }
214+ %typemap(argout) float * float_out {
215+ %append_output (PyFloat_FromDouble ((double )*$1 ));
216+ }
217+
218+
219+ /* TYPEMAP FOR MEMORY MANAGEMENT AND ENCODING OF STRINGS */
220+ %typemap(in, numinputs=0 )char ** string_out (char * temp), int* slen (int temp){
221+ $1 = &temp;
222+ }
223+ %typemap(argout)(char ** string_out, int * slen) {
224+ if (*$1 ) {
225+ PyObject* o;
226+ o = PyUnicode_FromStringAndSize (*$1 , *$2 );
227+
228+ $result = SWIG_Python_AppendOutput ($result, o);
229+ free (*$1 );
230+ }
231+ }
232+
233+
234+ /* TYPEMAPS FOR INT ARGUMENT AS RETURN VALUE */
235+ %typemap(in, numinputs=0 ) int * int_out (int temp) {
236+ $1 = &temp;
237+ }
238+ %typemap(argout) int * int_out {
239+ %append_output (PyInt_FromLong (*$1 ));
240+ }
241+
242+
209243/* TYPEMAPS FOR LONG ARGUMENT AS RETURN VALUE */
210244%typemap(in, numinputs=0 ) long * long_out (long temp) {
211245 $1 = &temp;
@@ -228,7 +262,7 @@ and return a (possibly) different pointer */
228262
229263 $1 = ($1_type)(val);
230264}
231- %apply EnumeratedType {EN_SaveOption};
265+ %apply EnumeratedType {EN_SaveOption, EN_NodeProperty };
232266
233267
234268/* RENAME FUNCTIONS PYTHON STYLE */
@@ -261,10 +295,11 @@ int DLLEXPORT EN_open(EN_ProjectHandle ph, const char *f1, const char *f2, const
261295int DLLEXPORT EN_close (EN_ProjectHandle ph);
262296
263297// RETREIVING INFORMATION ABOUT NETWORK NODES
264- int DLLEXPORT EN_getnodeindex (EN_ProjectHandle ph, char *id, int *index);
265- int DLLEXPORT EN_getnodeid (EN_ProjectHandle ph, int index, char *id);
266- int DLLEXPORT EN_getnodetype (EN_ProjectHandle ph, int index, int *code);
267- int DLLEXPORT EN_getnodevalue (EN_ProjectHandle ph, int index, int code, EN_API_FLOAT_TYPE *value);
298+ int DLLEXPORT EN_getnodeindex (EN_ProjectHandle ph, char *id, int *int_out);
299+ // int DLLEXPORT EN_getnodeid(EN_ProjectHandle ph, int index, char *id);
300+ int DLLEXPORT EN_getnodename (EN_ProjectHandle ph, int index, char **string_out, int *slen);
301+ int DLLEXPORT EN_getnodetype (EN_ProjectHandle ph, int index, int *int_out);
302+ int DLLEXPORT EN_getnodevalue (EN_ProjectHandle ph, int index, EN_NodeProperty code, float *float_out);
268303
269304// RETREIVING INFORMATION ABOUT NETWORK LINKS
270305int DLLEXPORT EN_getlinkindex (EN_ProjectHandle ph, char *id, int *index);
@@ -340,12 +375,50 @@ int DLLEXPORT EN_checkError(EN_ProjectHandle ph, char **msg_buffer);
340375
341376/* CODE ADDED DIRECTLY TO SWIGGED INTERFACE MODULE */
342377%pythoncode%{
378+
343379import enum
344380
381+ class NodeType (enum .Enum ):
382+ JUNCTION = EN_JUNCTION
383+ RESERVOIR = EN_RESERVOIR
384+ TANK = EN_TANK
385+
386+
387+ class NodeProperty (enum .Enum ):
388+ ELEVATION = EN_ELEVATION
389+ BASEDEMAND = EN_BASEDEMAND
390+ PATTERN = EN_PATTERN
391+ EMITTER = EN_EMITTER
392+ INITQUAL = EN_INITQUAL
393+ SOURCEQUAL = EN_SOURCEQUAL
394+ SOURCEPAT = EN_SOURCEPAT
395+ SOURCETYPE = EN_SOURCETYPE
396+ TANKLEVEL = EN_TANKLEVEL
397+ DEMAND = EN_DEMAND
398+ HEAD = EN_HEAD
399+ PRESSURE = EN_PRESSURE
400+ QUALITY = EN_QUALITY
401+ SOURCEMASS = EN_SOURCEMASS
402+ INITVOLUME = EN_INITVOLUME
403+ MIXMODEL = EN_MIXMODEL
404+ MIXZONEVOL = EN_MIXZONEVOL
405+ TANKDIAM = EN_TANKDIAM
406+ MINVOLUME = EN_MINVOLUME
407+ VOLCURVE = EN_VOLCURVE
408+ MINLEVEL = EN_MINLEVEL
409+ MAXLEVEL = EN_MAXLEVEL
410+ MIXFRACTION = EN_MIXFRACTION
411+ TANK_KBULK = EN_TANK_KBULK
412+ TANKVOLUME = EN_TANKVOLUME
413+ MAXVOLUME = EN_MAXVOLUME
414+
415+
345416class SaveOptions (enum .Enum ):
346- NOSAVE = EN_NOSAVE
347- SAVE = EN_SAVE
348- INITFLOW = EN_INITFLOW
349- SAVE_AND_INIT = EN_SAVE_AND_INIT
417+ NOSAVE = EN_NOSAVE
418+ SAVE = EN_SAVE
419+ INITFLOW = EN_INITFLOW
420+ SAVE_AND_INIT = EN_SAVE_AND_INIT
421+
422+
350423
351424%}
0 commit comments