def set_call_policies_pointee( mb ): # Set the default policy to deal with pointer/reference return types to reference_existing object # as this is the ogrenewt Default. ## NOTE AJM 1/1/07 -- this function not used as change to ref_existing_object.. from pyplusplus import module_creator mem_funs = mb.calldefs () mem_funs.create_with_signature = True #MSVC 7.1 if function has throw modifier. resolver = module_creator.built_in_resolver_t() for mem_fun in mem_funs: if mem_fun.call_policies: continue decl_call_policies = resolver( mem_fun ) if decl_call_policies: mem_fun.call_policies = decl_call_policies continue rtype = declarations.remove_alias( mem_fun.return_type ) if declarations.is_pointer(rtype) or declarations.is_reference(rtype): # mem_fun.call_policies \ # = call_policies.return_value_policy( call_policies.reference_existing_object ) mem_fun.call_policies \ = call_policies.return_value_policy( '::boost::python::return_pointee_value' ) ## now we fix a problem where the getSingleton policy isn't right mb.mem_funs( 'getSingleton' ).call_policies = call_policies.return_value_policy( call_policies.reference_existing_object )
def __apply_decls_defaults(self, decls): flatten_decls = decls_package.make_flatten( decls ) self.__filter_by_location( flatten_decls ) call_policies_resolver = mcreator_package.built_in_resolver_t() calldefs = filter( lambda decl: isinstance( decl, decls_package.calldef_t ) , flatten_decls ) map( lambda calldef: calldef.set_call_policies( call_policies_resolver( calldef ) ) , calldefs ) mem_vars = filter( lambda decl: isinstance( decl, decls_package.variable_t ) and isinstance( decl.parent, decls_package.class_t ) , flatten_decls ) map( lambda mem_var: mem_var.set_getter_call_policies( call_policies_resolver( mem_var, 'get' ) ) , mem_vars ) map( lambda mem_var: mem_var.set_setter_call_policies( call_policies_resolver( mem_var, 'set' ) ) , mem_vars )