diff options
Diffstat (limited to 'Examples/python/std_map')
-rw-r--r-- | Examples/python/std_map/Makefile | 25 | ||||
-rw-r--r-- | Examples/python/std_map/example.h | 17 | ||||
-rw-r--r-- | Examples/python/std_map/example.i | 27 | ||||
-rw-r--r-- | Examples/python/std_map/runme.py | 82 |
4 files changed, 151 insertions, 0 deletions
diff --git a/Examples/python/std_map/Makefile b/Examples/python/std_map/Makefile new file mode 100644 index 0000000..5d13da7 --- /dev/null +++ b/Examples/python/std_map/Makefile @@ -0,0 +1,25 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = +TARGET = example +INTERFACE = example.i +LIBS = -lm +SWIGOPT = + +all:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' python_cpp + +static:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='mypython' INTERFACE='$(INTERFACE)' python_cpp_static + +clean:: + $(MAKE) -f $(TOP)/Makefile python_clean + rm -f $(TARGET).py + +run: + python runme.py + +check: all + $(MAKE) -f $(TOP)/Makefile python_run diff --git a/Examples/python/std_map/example.h b/Examples/python/std_map/example.h new file mode 100644 index 0000000..79ccc64 --- /dev/null +++ b/Examples/python/std_map/example.h @@ -0,0 +1,17 @@ +/* File : example.h */ + +#include <map> +#include <string> + +template<class Key, class Value> +std::map<Key,Value> half_map(const std::map<Key,Value>& v) { + typedef typename std::map<Key,Value>::const_iterator iter; + std::map<Key,Value> w; + for (iter i = v.begin(); i != v.end(); ++i) { + w[i->first] = (i->second)/2; + } + return w; +} + + + diff --git a/Examples/python/std_map/example.i b/Examples/python/std_map/example.i new file mode 100644 index 0000000..6a7af71 --- /dev/null +++ b/Examples/python/std_map/example.i @@ -0,0 +1,27 @@ +/* File : example.i */ +%module example + +%{ +#include "example.h" +%} + +%include std_string.i +%include std_pair.i +%include std_map.i + +/* instantiate the required template specializations */ +namespace std { + /* remember to instantiate the key,value pair! */ + %template(DoubleMap) map<std::string,double>; + %template() map<std::string,int>; +} + +/* Let's just grab the original header file here */ +%include "example.h" + +%template(halfd) half_map<std::string,double>; +%template(halfi) half_map<std::string,int>; + + +%template() std::pair<swig::SwigPtr_PyObject, swig::SwigPtr_PyObject>; +%template(pymap) std::map<swig::SwigPtr_PyObject, swig::SwigPtr_PyObject>; diff --git a/Examples/python/std_map/runme.py b/Examples/python/std_map/runme.py new file mode 100644 index 0000000..b521c9c --- /dev/null +++ b/Examples/python/std_map/runme.py @@ -0,0 +1,82 @@ +# file: runme.py + +import example + +pmap = example.pymap() +pmap["hi"] = 1 +pmap["hello"] = 2 + + + + +dmap = {} +dmap["hello"] = 1.0 +dmap["hi"] = 2.0 + +print dmap.items() +print dmap.keys() +print dmap.values() + +print dmap +hmap = example.halfd(dmap) +dmap = hmap + +print dmap +for i in dmap.iterkeys(): + print "key", i + +for i in dmap.itervalues(): + print "val", i + +for k,v in dmap.iteritems(): + print "item", k,v + +dmap = example.DoubleMap() +dmap["hello"] = 1.0 +dmap["hi"] = 2.0 + +for i in dmap.iterkeys(): + print "key", i + +for i in dmap.itervalues(): + print "val", i + +for k,v in dmap.iteritems(): + print "item", k,v + + +print dmap.items() +print dmap.keys() +print dmap.values() + +hmap = example.halfd(dmap) +print hmap.keys() +print hmap.values() + + + +dmap = {} +dmap["hello"] = 2 +dmap["hi"] = 4 + +hmap = example.halfi(dmap) +print hmap +print hmap.keys() +print hmap.values() + + +dmap = hmap + +for i in dmap.iterkeys(): + print "key", i + +for i in dmap.itervalues(): + print "val", i + +for i in dmap.iteritems(): + print "item", i + +for k,v in dmap.iteritems(): + print "item", k,v + +print dmap |