summaryrefslogtreecommitdiff
path: root/weave/sequence_spec.py
diff options
context:
space:
mode:
Diffstat (limited to 'weave/sequence_spec.py')
-rwxr-xr-xweave/sequence_spec.py77
1 files changed, 77 insertions, 0 deletions
diff --git a/weave/sequence_spec.py b/weave/sequence_spec.py
new file mode 100755
index 000000000..e7a1d08b1
--- /dev/null
+++ b/weave/sequence_spec.py
@@ -0,0 +1,77 @@
+import cxx_info
+from base_spec import base_specification
+from types import *
+import os
+
+class base_cxx_specification(base_specification):
+ _build_information = [cxx_info.cxx_info()]
+ def type_spec(self,name,value):
+ # factory
+ new_spec = self.__class__()
+ new_spec.name = name
+ return new_spec
+ def __repr__(self):
+ msg = "(%s:: name: %s)" % (self.type_name,self.name)
+ return msg
+ def __cmp__(self,other):
+ #only works for equal
+ return cmp(self.name,other.name) or \
+ cmp(self.__class__, other.__class__)
+
+class string_specification(base_cxx_specification):
+ type_name = 'string'
+ def type_match(self,value):
+ return type(value) in [StringType]
+
+ def declaration_code(self,templatize = 0,inline=0):
+ var_name = self.retrieve_py_variable(inline)
+ code = 'Py::String %s = py_to_string(%s,"%s");\n' % \
+ (self.name,var_name,self.name)
+ return code
+ def local_dict_code(self):
+ code = 'local_dict["%s"] = %s;\n' % (self.name,self.name)
+ return code
+
+
+class list_specification(base_cxx_specification):
+ type_name = 'list'
+ def type_match(self,value):
+ return type(value) in [ListType]
+
+ def declaration_code(self,templatize = 0,inline=0):
+ var_name = self.retrieve_py_variable(inline)
+ code = 'Py::List %s = py_to_list(%s,"%s");\n' % \
+ (self.name,var_name,self.name)
+ return code
+ def local_dict_code(self):
+ code = 'local_dict["%s"] = %s;\n' % (self.name,self.name)
+ return code
+
+class dict_specification(base_cxx_specification):
+ type_name = 'dict'
+ def type_match(self,value):
+ return type(value) in [DictType]
+
+ def declaration_code(self,templatize = 0,inline=0):
+ var_name = self.retrieve_py_variable(inline)
+ code = 'Py::Dict %s = py_to_dict(%s,"%s");\n' % \
+ (self.name,var_name,self.name)
+ return code
+
+ def local_dict_code(self):
+ code = 'local_dict["%s"] = %s;\n' % (self.name,self.name)
+ return code
+
+class tuple_specification(base_cxx_specification):
+ type_name = 'tuple'
+ def type_match(self,value):
+ return type(value) in [TupleType]
+
+ def declaration_code(self,templatize = 0,inline=0):
+ var_name = self.retrieve_py_variable(inline)
+ code = 'Py::Tuple %s = py_to_tuple(%s,"%s");\n' % \
+ (self.name,var_name,self.name)
+ return code
+ def local_dict_code(self):
+ code = 'local_dict["%s"] = %s;\n' % (self.name,self.name)
+ return code