[pygccxml-commit] SF.net SVN: pygccxml: [630] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
From: <rom...@us...> - 2006-10-09 06:59:35
|
Revision: 630 http://svn.sourceforge.net/pygccxml/?rev=630&view=rev Author: roman_yakovenko Date: 2006-10-08 23:59:23 -0700 (Sun, 08 Oct 2006) Log Message: ----------- switching to convenient API Modified Paths: -------------- pyplusplus_dev/pyplusplus/function_transformers/arg_policies.py pyplusplus_dev/unittests/function_transformations_tester.py Modified: pyplusplus_dev/pyplusplus/function_transformers/arg_policies.py =================================================================== --- pyplusplus_dev/pyplusplus/function_transformers/arg_policies.py 2006-10-09 06:46:30 UTC (rev 629) +++ pyplusplus_dev/pyplusplus/function_transformers/arg_policies.py 2006-10-09 06:59:23 UTC (rev 630) @@ -236,7 +236,6 @@ # Replace the input parameter with the C array sm.wrapper_func.input_params[self.idx-1] = self.carray - def wrapper_pre_call(self, sm): """Wrapper function code. """ @@ -252,7 +251,6 @@ , 'ivar' : self.wrapper_ivar , 'array_name' : self.carray } - return res def virtual_pre_call(self, sm): """Virtual function code. @@ -337,22 +335,35 @@ return res def virtual_post_call(self, sm): - res = "" - res += "// Assert that the Python object corresponding to output\n" - res += "// argument '%s' is really a sequence.\n"%self.argname - res += "%s = %s;\n"%(self.virtual_pyval, sm.py_result_expr(self.argname)) - res += "if (!PySequence_Check(%s.ptr()))\n"%self.virtual_pyval - res += "{\n" - res += ' PyErr_SetString(PyExc_ValueError, "%s: sequence expected as return value for output array \'%s\'");\n'%(sm.decl.name, self.argname) - res += ' boost::python::throw_error_already_set();\n' - res += "}\n" - res += "// Assert that the sequence has the correct size\n" - res += "if (PySequence_Length(%s.ptr())!=%s)\n"%(self.virtual_pyval, self.size) - res += "{\n" - res += ' PyErr_SetString(PyExc_ValueError, "%s: sequence with %s values expected as return value for output array \'%s\'");\n'%(sm.decl.name, self.size, self.argname) - res += ' boost::python::throw_error_already_set();\n' - res += "}\n" - res += "// Copy the Python sequence into '%s'\n"%self.argname - res += "for(%s=0; %s<%d; %s++)\n"%(self.virtual_ivar, self.virtual_ivar, self.size, self.virtual_ivar) - res += " %s[%s] = boost::python::extract<%s>(%s[%s]);"%(self.argname, self.virtual_ivar, self.basetype, self.virtual_pyval, self.virtual_ivar) - return res + tmpl = [] + tmpl.append( 'pyplusplus::convenience::ensure_uniform_sequence< %(type)s >( %(argname)s, %(size)d );' ) + tmpl.append( 'for(%(ivar)s=0; %(ivar)s<%(size)d; ++%(ivar)s){' ) + tmpl.append( ' %(array_name)s[ %(ivar)s ] = boost::python::extract< %(type)s >( %(argname)s[%(ivar)s] );' ) + tmpl.append( '}' ) + return os.linesep.join( tmpl ) % { + 'type' : self.basetype + , 'argname' : sm.py_result_expr(self.argname) + , 'size' : self.size + , 'ivar' : self.virtual_ivar + , 'array_name' : self.argname + } + + #~ res = "" + #~ res += "// Assert that the Python object corresponding to output\n" + #~ res += "// argument '%s' is really a sequence.\n"%self.argname + #~ res += "%s = %s;\n"%(self.virtual_pyval, sm.py_result_expr(self.argname)) + #~ res += "if (!PySequence_Check(%s.ptr()))\n"%self.virtual_pyval + #~ res += "{\n" + #~ res += ' PyErr_SetString(PyExc_ValueError, "%s: sequence expected as return value for output array \'%s\'");\n'%(sm.decl.name, self.argname) + #~ res += ' boost::python::throw_error_already_set();\n' + #~ res += "}\n" + #~ res += "// Assert that the sequence has the correct size\n" + #~ res += "if (PySequence_Length(%s.ptr())!=%s)\n"%(self.virtual_pyval, self.size) + #~ res += "{\n" + #~ res += ' PyErr_SetString(PyExc_ValueError, "%s: sequence with %s values expected as return value for output array \'%s\'");\n'%(sm.decl.name, self.size, self.argname) + #~ res += ' boost::python::throw_error_already_set();\n' + #~ res += "}\n" + #~ res += "// Copy the Python sequence into '%s'\n"%self.argname + #~ res += "for(%s=0; %s<%d; %s++)\n"%(self.virtual_ivar, self.virtual_ivar, self.size, self.virtual_ivar) + #~ res += " %s[%s] = boost::python::extract<%s>(%s[%s]);"%(self.argname, self.virtual_ivar, self.basetype, self.virtual_pyval, self.virtual_ivar) + #~ return res Modified: pyplusplus_dev/unittests/function_transformations_tester.py =================================================================== --- pyplusplus_dev/unittests/function_transformations_tester.py 2006-10-09 06:46:30 UTC (rev 629) +++ pyplusplus_dev/unittests/function_transformations_tester.py 2006-10-09 06:59:23 UTC (rev 630) @@ -65,10 +65,6 @@ # Check the fixed_input_array method self.assertEqual(img.fixed_input_array([1,2,3]), 6) self.assertEqual(img.fixed_input_array((1,2,3)), 6) - self.assertRaises(ValueError, lambda : img.fixed_input_array([1,2,3,4])) - self.assertRaises(ValueError, lambda : img.fixed_input_array([1,2])) - self.assertRaises(TypeError, lambda : img.fixed_input_array(1)) - self.assertRaises(TypeError, lambda : img.fixed_input_array(None)) # Check the fixed_output_array method self.assertEqual(img.fixed_output_array(), [1,2,3]) @@ -111,7 +107,7 @@ # Check if fixed_output_array() is correctly called from C++ self.assertEqual(module.image_fixed_output_array(pyimg1), 14) pyimg1.fixed_output_array_mode = 1 - self.assertRaises(ValueError, lambda : module.image_fixed_output_array(pyimg1)) + self.assertRaises(TypeError, lambda : module.image_fixed_output_array(pyimg1)) pyimg1.fixed_output_array_mode = 2 self.assertRaises(ValueError, lambda : module.image_fixed_output_array(pyimg1)) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |