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 )
Example #2
0
 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 )