@@ -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,10 @@ 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_getnodename (EN_ProjectHandle ph, int index, char **string_out, int *slen );
300+ int DLLEXPORT EN_getnodetype (EN_ProjectHandle ph, int index, int *int_out );
301+ int DLLEXPORT EN_getnodevalue (EN_ProjectHandle ph, int index, EN_NodeProperty code, float *float_out );
268302
269303// RETREIVING INFORMATION ABOUT NETWORK LINKS
270304int DLLEXPORT EN_getlinkindex (EN_ProjectHandle ph, char *id, int *index);
@@ -340,12 +374,50 @@ int DLLEXPORT EN_checkError(EN_ProjectHandle ph, char **msg_buffer);
340374
341375/* CODE ADDED DIRECTLY TO SWIGGED INTERFACE MODULE */
342376%pythoncode%{
377+
343378import enum
344379
380+ class NodeType (enum .Enum ):
381+ JUNCTION = EN_JUNCTION
382+ RESERVOIR = EN_RESERVOIR
383+ TANK = EN_TANK
384+
385+
386+ class NodeProperty (enum .Enum ):
387+ ELEVATION = EN_ELEVATION
388+ BASEDEMAND = EN_BASEDEMAND
389+ PATTERN = EN_PATTERN
390+ EMITTER = EN_EMITTER
391+ INITQUAL = EN_INITQUAL
392+ SOURCEQUAL = EN_SOURCEQUAL
393+ SOURCEPAT = EN_SOURCEPAT
394+ SOURCETYPE = EN_SOURCETYPE
395+ TANKLEVEL = EN_TANKLEVEL
396+ DEMAND = EN_DEMAND
397+ HEAD = EN_HEAD
398+ PRESSURE = EN_PRESSURE
399+ QUALITY = EN_QUALITY
400+ SOURCEMASS = EN_SOURCEMASS
401+ INITVOLUME = EN_INITVOLUME
402+ MIXMODEL = EN_MIXMODEL
403+ MIXZONEVOL = EN_MIXZONEVOL
404+ TANKDIAM = EN_TANKDIAM
405+ MINVOLUME = EN_MINVOLUME
406+ VOLCURVE = EN_VOLCURVE
407+ MINLEVEL = EN_MINLEVEL
408+ MAXLEVEL = EN_MAXLEVEL
409+ MIXFRACTION = EN_MIXFRACTION
410+ TANK_KBULK = EN_TANK_KBULK
411+ TANKVOLUME = EN_TANKVOLUME
412+ MAXVOLUME = EN_MAXVOLUME
413+
414+
345415class SaveOptions (enum .Enum ):
346- NOSAVE = EN_NOSAVE
347- SAVE = EN_SAVE
348- INITFLOW = EN_INITFLOW
349- SAVE_AND_INIT = EN_SAVE_AND_INIT
416+ NOSAVE = EN_NOSAVE
417+ SAVE = EN_SAVE
418+ INITFLOW = EN_INITFLOW
419+ SAVE_AND_INIT = EN_SAVE_AND_INIT
420+
421+
350422
351423%}
0 commit comments