Exemple #1
0
 def _get_alias(self):
     if not self._alias:
         directives = self.__select_alias_directives(be_smart=True)
         if 1 == len(directives):
             self._alias = directives[0].name
         else:
             if declarations.templates.is_instantiation(self.name):
                 container_aliases = [
                     'value_type', 'key_type', 'mapped_type'
                 ]
                 if isinstance( self, declarations.class_t ) \
                     and 1 == len( set( map( lambda typedef: typedef.name, self.aliases ) ) ) \
                     and self.aliases[0].name not in container_aliases:
                     self._alias = self.aliases[0].name
                 else:
                     self._alias = algorithm.create_valid_name(
                         self.partial_name)
             else:
                 if declarations.is_class(
                         self) or declarations.is_class_declaration(self):
                     self._alias = algorithm.create_valid_name(
                         self.partial_name)
                 else:
                     self._alias = self.partial_name
     return self._alias
Exemple #2
0
 def find_class(type_):
     type_ = declarations.remove_reference(type_)
     if declarations.is_class(type_):
         return declarations.class_traits.get_declaration(type_)
     elif declarations.is_class_declaration(type_):
         return declarations.class_declaration_traits.get_declaration(type_)
     else:
         return None
Exemple #3
0
 def find_class( type_ ):
     type_ = declarations.remove_reference( type_ )
     if declarations.is_class( type_ ):
         return declarations.class_traits.get_declaration( type_ )
     elif declarations.is_class_declaration( type_ ):
         return declarations.class_declaration_traits.get_declaration( type_ )
     else:
         return None
 def _get_alias(self):
     if not self._alias:
         if declarations.templates.is_instantiation(self.name):
             self._alias = algorithm.create_valid_name(self.partial_name)
         else:
             if declarations.is_class(
                     self) or declarations.is_class_declaration(self):
                 self._alias = algorithm.create_valid_name(
                     self.partial_name)
             else:
                 self._alias = self.partial_name
     if callable(self._alias):
         return self._alias()
     return self._alias
Exemple #5
0
    def __call__(self, variable, hint=None):
        if not isinstance(variable, declarations.variable_t):
            return None

        assert hint in ('get', 'set')

        if not declarations.is_reference(variable.decl_type):
            return None

        no_ref = declarations.remove_reference(variable.decl_type)
        base_type = declarations.remove_const(no_ref)
        if python_traits.is_immutable(base_type):
            #the relevant code creator will generate code, that will return this member variable
            #by value
            return decl_wrappers.default_call_policies()

        if not isinstance(base_type, declarations.declarated_t):
            return None

        base_type = declarations.remove_alias(base_type)
        declaration = base_type.declaration

        if declarations.is_class_declaration(declaration):
            return None

        if declaration.is_abstract:
            return None
        if declarations.has_destructor(
                declaration
        ) and not declarations.has_public_destructor(declaration):
            return None
        if not declarations.has_copy_constructor(declaration):
            return None
        if hint == 'get':
            #if we rich this line, it means that we are able to create an obect using
            #copy constructor.
            if declarations.is_const(no_ref):
                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.default_call_policies()
 def _get_alias(self):
     if not self._alias:
         directives = self.__select_alias_directives(be_smart=True)
         if 1 == len( directives ):
             self._alias = directives[0].name
         else:
             if declarations.templates.is_instantiation( self.name ):
                 container_aliases = [ 'value_type', 'key_type', 'mapped_type' ]
                 if isinstance( self, declarations.class_t ) \
                     and 1 == len( set( [typedef.name for typedef in self.aliases] ) ) \
                     and self.aliases[0].name not in container_aliases:
                         self._alias = self.aliases[0].name
                 else:
                     self._alias = algorithm.create_valid_name( self.partial_name )
             else:
                 if declarations.is_class( self ) or declarations.is_class_declaration( self ):
                     self._alias = algorithm.create_valid_name( self.partial_name )
                 else:
                     self._alias = self.partial_name
     return self._alias
def find_out_opaque_decl( type_, ensure_opaque_decl ):
    naked_type = declarations.remove_cv( type_ )
    if not declarations.is_pointer( naked_type ):
        return None
    naked_type = declarations.remove_pointer( declarations.remove_cv( type_ ) )
    if decl_wrappers.python_traits.is_immutable( naked_type ):
        return None#immutable types could not be opaque
    decl = None
    if declarations.is_class( naked_type ):
        decl = declarations.class_traits.get_declaration( naked_type )
    elif declarations.is_class_declaration( naked_type ):#class declaration:
        decl = declarations.class_declaration_traits.get_declaration( naked_type )
    else:
        return None
    if ensure_opaque_decl:
        if decl.opaque:
            return decl
        else:
            return None
    else:
        return decl
Exemple #8
0
    def __call__( self, variable, hint=None ):
        if not isinstance( variable, declarations.variable_t ):
            return None

        assert hint in ( 'get', 'set' )
        
        if not declarations.is_reference( variable.type ):
            return None
        
        no_ref = declarations.remove_reference( variable.type )
        base_type = declarations.remove_const( no_ref )
        if python_traits.is_immutable( base_type ):
            #the relevant code creator will generate code, that will return this member variable
            #by value
            return decl_wrappers.default_call_policies()
        
        if not isinstance( base_type, declarations.declarated_t ):
            return None
        
        base_type = declarations.remove_alias( base_type )
        decl = base_type.declaration
        
        if declarations.is_class_declaration( decl ):
            return None
        
        if decl.is_abstract:
            return None
        if declarations.has_destructor( decl ) and not declarations.has_public_destructor( decl ): 
            return None
        if not declarations.has_copy_constructor(decl):
            return None
        if hint == 'get':
            #if we rich this line, it means that we are able to create an obect using
            #copy constructor. 
            if declarations.is_const( no_ref ):
                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.default_call_policies()
def find_out_opaque_decl(type_, ensure_opaque_decl):
    naked_type = declarations.remove_cv(type_)
    if not declarations.is_pointer(naked_type):
        return None
    naked_type = declarations.remove_pointer(declarations.remove_cv(type_))
    if decl_wrappers.python_traits.is_immutable(naked_type):
        return None  #immutable types could not be opaque
    decl = None
    if declarations.is_class(naked_type):
        decl = declarations.class_traits.get_declaration(naked_type)
    elif declarations.is_class_declaration(naked_type):  #class declaration:
        decl = declarations.class_declaration_traits.get_declaration(
            naked_type)
    else:
        return None
    if ensure_opaque_decl:
        if decl.opaque:
            return decl
        else:
            return None
    else:
        return decl