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
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 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
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
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