예제 #1
0
    def __call__(self, calldef, hint=None):
        if not isinstance( calldef, declarations.calldef_t ):
            return None

        if not isinstance( calldef, declarations.member_operator_t ):
            return None
        
        if calldef.symbol != '[]':
            return None
            
        return_type = declarations.remove_cv( calldef.return_type )
        if declarations.is_reference( return_type ): 
            return_type = declarations.remove_reference( return_type )
        if python_traits.is_immutable( return_type ):
            if declarations.is_const( calldef.return_type ):
                return decl_wrappers.return_value_policy( decl_wrappers.copy_const_reference )
            else:
                return decl_wrappers.return_value_policy( decl_wrappers.copy_non_const_reference )
        else:
            return decl_wrappers.return_internal_reference()
예제 #2
0
    def __call__(self, calldef, hint=None):
        if not isinstance( calldef, declarations.calldef_t ):
            return None

        if not isinstance( calldef, declarations.member_operator_t ):
            return None
        
        if calldef.symbol != '[]':
            return None
            
        return_type = declarations.remove_cv( calldef.return_type )
        if declarations.is_reference( return_type ): 
            return_type = declarations.remove_reference( return_type )
        if python_traits.is_immutable( return_type ):
            if declarations.is_const( calldef.return_type ):
                return decl_wrappers.return_value_policy( decl_wrappers.copy_const_reference )
            else:
                return decl_wrappers.return_value_policy( decl_wrappers.copy_non_const_reference )
        else:
            return decl_wrappers.return_internal_reference()
예제 #3
0
from pyplusplus.decl_wrappers import with_custodian_and_ward
from pyplusplus.decl_wrappers import copy_const_reference
from pyplusplus.decl_wrappers import copy_non_const_reference
from pyplusplus.decl_wrappers import manage_new_object
from pyplusplus.decl_wrappers import reference_existing_object
from pyplusplus.decl_wrappers import return_by_value
from pyplusplus.decl_wrappers import return_opaque_pointer
from pyplusplus.decl_wrappers import return_value_policy

db = {
      "::FX::fx2powerprimes" : return_value_policy( return_by_value )
    , "::FX::FX4Splitter::getBottomLeft" :  return_value_policy( reference_existing_object )
    , "::FX::FX4Splitter::getBottomRight" : return_value_policy( reference_existing_object )
    , "::FX::FX4Splitter::getTopLeft" : return_value_policy( reference_existing_object )
    , "::FX::FX4Splitter::getTopRight" : return_value_policy( reference_existing_object )
    , "::FX::FXAccelTable::targetOfAccel" : return_internal_reference()
    , "::FX::FXACL::owner" : return_internal_reference()
    , "::FX::FXACL::Permissions::setAll" : return_self()
    , "::FX::FXACL::Permissions::setAppend" : return_self()
    , "::FX::FXACL::Permissions::setCopyOnWrite" : return_self()
    , "::FX::FXACL::Permissions::setCreateDirs" : return_self()
    , "::FX::FXACL::Permissions::setCreateFiles" : return_self()
    , "::FX::FXACL::Permissions::setDeleteDirs" : return_self()
    , "::FX::FXACL::Permissions::setDeleteFiles" : return_self()
    , "::FX::FXACL::Permissions::setExecute" : return_self()
    , "::FX::FXACL::Permissions::setGenExecute" : return_self()
    , "::FX::FXACL::Permissions::setGenRead" : return_self()
    , "::FX::FXACL::Permissions::setGenWrite" : return_self()
    , "::FX::FXACL::Permissions::setList" : return_self()
    , "::FX::FXACL::Permissions::setReadAttrs" :  return_self()
    , "::FX::FXACL::Permissions::setReadPerms" :  return_self()
예제 #4
0
파일: create_tnfox.py 프로젝트: ned14/tnfox
def set_call_policies(mb):

    #for func in mb.calldefs():
    #    if "QMemArray" in func.name:
    #        print "HERE!", func.name, func.parent.name, [x.name for x in func.arguments]
    #sys.exit(0)

    #first of all call policies defined within data base
    for fname, call_pol in call_policies.db.items():
        #print fname
        try:
            if fname.startswith( '::FX::FX' ):
                mb.member_functions( fname ).call_policies = call_pol
            else:
                mb.calldefs( fname ).call_policies = call_pol
        except:
            print "ERROR, skipping! was:",sys.exc_info()[0],sys.exc_info()[1]
       
    try:
        copy_funcs = mb.calldefs( lambda decl: 'FXGL' in decl.parent.name and decl.name == 'copy' )
        copy_funcs.call_policies = decl_wrappers.return_value_policy( decl_wrappers.manage_new_object )
    except:
        print "ERROR, skipping! was:",sys.exc_info()[0],sys.exc_info()[1]
    
    try:
        take_funcs = mb.calldefs( lambda decl: 'QPtrVector<' in decl.parent.name \
                                  and decl.name == 'take' \
                                  and declarations.is_pointer( decl.return_type ) )
        # Set reference_existing object only on the overload not returning a bool
        take_funcs.call_policies = decl_wrappers.return_value_policy( decl_wrappers.reference_existing_object )
    except:
        print "ERROR, skipping! was:",sys.exc_info()[0],sys.exc_info()[1]

    try:
        mb.calldefs( 'manufacture' ).call_policies \
            = decl_wrappers.return_value_policy( decl_wrappers.manage_new_object )
        mb.calldefs( 'getMetaClass' ).call_policies \
            = decl_wrappers.return_value_policy( decl_wrappers.reference_existing_object )
    except:
        print "ERROR, skipping! was:",sys.exc_info()[0],sys.exc_info()[1]

    #third calculated
    return_by_value = decl_wrappers.return_value_policy( decl_wrappers.return_by_value )
    return_internal_ref = decl_wrappers.return_internal_reference()
    const_t = declarations.const_t
    pointer_t = declarations.pointer_t
    #~ system_wide = {
          #~ pointer_t( declarations.char_t() ) : return_by_value
        #~ , pointer_t( declarations.wchar_t() ) : return_by_value
        #~ #used in 3/4 d/f mat/vec classes
        #~ , pointer_t( declarations.float_t() ) : return_internal_ref
        #~ , pointer_t( const_t( declarations.float_t() ) ) : return_internal_ref
        #~ , pointer_t( declarations.double_t() ) : return_internal_ref
        #~ , pointer_t( const_t( declarations.double_t() ) ) : return_internal_ref
    #~ }

    #~ for type_, policy in system_wide.items():
        #~ mb.calldefs( return_type=type_ ).call_policies = policy

    for name in ['::FX::FXVec4d', '::FX::FXVec4f', '::FX::FXVec3d', '::FX::FXVec3f', '::FX::FXVec2d', '::FX::FXVec2f', '::FX::QMemArray<unsigned char>']:
        try:
            mb.casting_operators( name ).call_policies = return_internal_ref
        except:
            print "ERROR, skipping! was:",sys.exc_info()[0],sys.exc_info()[1]

    return None