summaryrefslogtreecommitdiff
path: root/Examples/python/std_map
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/python/std_map')
-rw-r--r--Examples/python/std_map/Makefile25
-rw-r--r--Examples/python/std_map/example.h17
-rw-r--r--Examples/python/std_map/example.i27
-rw-r--r--Examples/python/std_map/runme.py82
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