[pygccxml-commit] SF.net SVN: pygccxml:[1798] pyplusplus_dev
Brought to you by:
mbaas,
roman_yakovenko
|
From: <rom...@us...> - 2010-01-13 10:38:29
|
Revision: 1798
http://pygccxml.svn.sourceforge.net/pygccxml/?rev=1798&view=rev
Author: roman_yakovenko
Date: 2010-01-13 10:38:19 +0000 (Wed, 13 Jan 2010)
Log Message:
-----------
integrating inout_static_matrix implementation
Modified Paths:
--------------
pyplusplus_dev/pyplusplus/function_transformers/transformers.py
pyplusplus_dev/unittests/test_all.py
Added Paths:
-----------
pyplusplus_dev/unittests/data/ft_inout_static_matrix_to_be_exported.hpp
pyplusplus_dev/unittests/ft_inout_static_matrix_tester.py
Modified: pyplusplus_dev/pyplusplus/function_transformers/transformers.py
===================================================================
--- pyplusplus_dev/pyplusplus/function_transformers/transformers.py 2010-01-13 09:48:10 UTC (rev 1797)
+++ pyplusplus_dev/pyplusplus/function_transformers/transformers.py 2010-01-13 10:38:19 UTC (rev 1798)
@@ -716,8 +716,9 @@
self.__configure_sealed( controller )
def configure_virtual_mem_fun( self, controller ):
- self.__configure_v_mem_fun_override( controller.override_controller )
- self.__configure_v_mem_fun_default( controller.default_controller )
+ raise RuntimeError( '"output_static_matrix" transformation does not support virtual functions yet.' )
+ #self.__configure_v_mem_fun_override( controller.override_controller )
+ #self.__configure_v_mem_fun_default( controller.default_controller )
# inout_static_matrix_t
class inout_static_matrix_t(transformer.transformer_t):
@@ -756,42 +757,46 @@
return [ code_repository.convenience.file_name ]
def __configure_sealed(self, controller):
- global _seq2arr
- global _mat2seq
+ global _pymatrix2cmatrix
+ global _cmatrix2pymatrix
w_arg = controller.find_wrapper_arg( self.arg.name )
w_arg.type = declarations.dummy_type_t( "boost::python::object" )
# Declare a variable that will hold the C matrix...
native_matrix = controller.declare_variable( self.matrix_item_type
, "native_" + self.arg.name
- , '[%d][%d]' % (self.rows, self.columns)
- )
+ , '[%d][%d]' % (self.rows, self.columns) )
- pre_call = string.Template('pyplus_conv::ensure_uniform_sequence< $type >( $pylist, $array_size );')
- controller.add_pre_call_code(pre_call.substitute(type='boost::python::list', pylist=w_arg.name,array_size=self.rows))
+ conversion_code = _pymatrix2cmatrix.substitute( type=self.matrix_item_type
+ , pymatrix=w_arg.name
+ , columns='%d' % self.columns
+ , row=controller.register_variable_name( "row" )
+ , rows='%d' % self.rows
+ , native_matrix=native_matrix )
- #TODO: may be a better idea is move this loop to the generated code.
- for i in range(0,self.rows):
- copy_pylist2arr = _seq2arr.substitute( type=self.matrix_item_type
- , pylist=w_arg.name+"["+str(i)+"]"
- , array_size=self.columns
- , native_array=native_matrix+'['+str(i)+']' )
+ controller.add_pre_call_code( conversion_code )
- controller.add_pre_call_code( copy_pylist2arr )
+ controller.modify_arg_expression( self.arg_index, native_matrix )
+
+ #adding just declared variable to the original function call expression
controller.modify_arg_expression( self.arg_index, native_matrix )
- pylist = controller.declare_variable( declarations.dummy_type_t( "boost::python::list" )
+ # Declare a Python list which will receive the output...
+ pymatrix = controller.declare_variable( declarations.dummy_type_t( "boost::python::list" )
, 'py_' + self.arg.name )
- copy_mat2pylist = _mat2seq.substitute( native_matrix = native_matrix
- , rows=self.rows
- , columns=self.columns
- , pylist=pylist)
- controller.add_post_call_code( copy_mat2pylist )
+ conversion_code = _cmatrix2pymatrix.substitute( pymatrix=pymatrix
+ , columns='%d' % self.columns
+ , row=controller.register_variable_name( "row" )
+ , pyrow=controller.register_variable_name( "pyrow" )
+ , rows='%d' % self.rows
+ , native_matrix=native_matrix )
+
+ controller.add_post_call_code( conversion_code )
#adding the variable to return variables list
- controller.return_variable( pylist )
+ controller.return_variable( pymatrix )
def __configure_v_mem_fun_default( self, controller ):
self.__configure_sealed( controller )
@@ -815,8 +820,9 @@
self.__configure_sealed( controller )
def configure_virtual_mem_fun( self, controller ):
- self.__configure_v_mem_fun_override( controller.override_controller )
- self.__configure_v_mem_fun_default( controller.default_controller )
+ raise RuntimeError( '"output_static_matrix" transformation does not support virtual functions yet.' )
+ #self.__configure_v_mem_fun_override( controller.override_controller )
+ #self.__configure_v_mem_fun_default( controller.default_controller )
# input_c_buffer_t
class input_c_buffer_t(transformer.transformer_t):
Added: pyplusplus_dev/unittests/data/ft_inout_static_matrix_to_be_exported.hpp
===================================================================
--- pyplusplus_dev/unittests/data/ft_inout_static_matrix_to_be_exported.hpp (rev 0)
+++ pyplusplus_dev/unittests/data/ft_inout_static_matrix_to_be_exported.hpp 2010-01-13 10:38:19 UTC (rev 1798)
@@ -0,0 +1,28 @@
+// Copyright 2004-2008 Roman Yakovenko.
+// Distributed under the Boost Software License, Version 1.0. (See
+// accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#ifndef __ft_inout_static_matrix_to_be_exported_hpp__
+#define __ft_inout_static_matrix_to_be_exported_hpp__
+
+#include <cmath>
+#include <string>
+#include <iostream>
+
+namespace ft{
+
+int sum_and_fill( int m[2][3], int value ){
+ int result = 0;
+ for( int r = 0; r < 2; ++r ){
+ for( int c = 0; c < 3; ++c ){
+ result += m[r][c];
+ m[r][c] *= value;
+ }
+ }
+ return result;
+}
+
+}
+
+#endif//__ft_inout_static_matrix_to_be_exported_hpp__
Added: pyplusplus_dev/unittests/ft_inout_static_matrix_tester.py
===================================================================
--- pyplusplus_dev/unittests/ft_inout_static_matrix_tester.py (rev 0)
+++ pyplusplus_dev/unittests/ft_inout_static_matrix_tester.py 2010-01-13 10:38:19 UTC (rev 1798)
@@ -0,0 +1,49 @@
+# Copyright 2004-2008 Roman Yakovenko.
+# Distributed under the Boost Software License, Version 1.0. (See
+# accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+import os
+import sys
+import math
+import unittest
+import fundamental_tester_base
+from pygccxml import declarations
+from pyplusplus import function_transformers as ft
+from pyplusplus.module_builder import call_policies
+
+class tester_t(fundamental_tester_base.fundamental_tester_base_t):
+ EXTENSION_NAME = 'ft_inout_static_matrix'
+
+ def __init__( self, *args ):
+ fundamental_tester_base.fundamental_tester_base_t.__init__(
+ self
+ , tester_t.EXTENSION_NAME
+ , *args )
+
+ def customize( self, mb ):
+ mb.global_ns.calldefs().create_with_signature = True
+
+ sum_and_fill = mb.free_fun( 'sum_and_fill' )
+ sum_and_fill.add_transformation( ft.inout_static_matrix('m', rows=2, columns=3) )
+
+ #calculate = mb.mem_fun( 'calculate' )
+ #calculate.add_transformation( ft.input_static_matrix('m', rows=3, columns=5) )
+
+ def run_tests(self, module):
+ """Run the actual unit tests"""
+ m = [ [1, 2, 3], [4,5,6] ]
+ result = module.sum_and_fill( m, -1 )
+ self.failUnless( 21 == result[0] )
+ self.failUnless( [ [-1, -2, -3], [-4,-5,-6] ] == result[1])
+
+def create_suite():
+ suite = unittest.TestSuite()
+ suite.addTest( unittest.makeSuite(tester_t))
+ return suite
+
+def run_suite():
+ unittest.TextTestRunner(verbosity=2).run( create_suite() )
+
+if __name__ == "__main__":
+ run_suite()
Modified: pyplusplus_dev/unittests/test_all.py
===================================================================
--- pyplusplus_dev/unittests/test_all.py 2010-01-13 09:48:10 UTC (rev 1797)
+++ pyplusplus_dev/unittests/test_all.py 2010-01-13 10:38:19 UTC (rev 1798)
@@ -124,6 +124,7 @@
import indexing_suites2_support_tester
import ft_input_static_matrix_tester
import ft_output_static_matrix_tester
+import ft_inout_static_matrix_tester
testers = [
algorithms_tester
@@ -236,6 +237,7 @@
, indexing_suites2_support_tester
, ft_input_static_matrix_tester
, ft_output_static_matrix_tester
+ , ft_inout_static_matrix_tester
# , ogre_generate_tester too much time
]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|