| /******************************************************************************* |
| * Copyright (c) 2016 CEA LIST. |
| * |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Created on: 13 juin 2014 |
| * |
| * Contributors: |
| * Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr |
| * - Initial API and implementation |
| ******************************************************************************/ |
| |
| #include "TypeSpecifier.h" |
| |
| #include <common/BF.h> |
| |
| #include <fml/symbol/Symbol.h> |
| |
| #include <fml/type/BaseSymbolTypeSpecifier.h> |
| #include <fml/type/TypeAliasSpecifier.h> |
| #include <fml/type/ClassTypeSpecifier.h> |
| #include <fml/type/EnumTypeSpecifier.h> |
| #include <fml/type/ContainerTypeSpecifier.h> |
| #include <fml/type/IntervalTypeSpecifier.h> |
| #include <fml/type/UnionTypeSpecifier.h> |
| |
| |
| namespace sep |
| { |
| |
| |
| /** |
| * DEFAULT NULL |
| */ |
| TypeSpecifier TypeSpecifier::REF_NULL; |
| |
| |
| /** |
| * ASSIGNMENT |
| * BF |
| */ |
| TypeSpecifier & TypeSpecifier::operator=(const BF & aType) |
| { |
| AVM_OS_ASSERT_FATAL_ERROR_EXIT( aType.is_weakly< BaseTypeSpecifier >() ) |
| << "Invalid Assignment Cast in a Type of " << aType.str() |
| << SEND_EXIT; |
| |
| if( mPTR != aType.raw_pointer() ) |
| { |
| AVM_ASSIGN_STMNT_DEBUG_TYPE_PTR( aType.raw_pointer() ) |
| |
| release( static_cast< BaseTypeSpecifier * >( aType.raw_pointer() ) ); |
| } |
| return( *this ); |
| } |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // TypeAliasSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| TypeAliasSpecifier & TypeSpecifier::alias() |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as TypeAliasSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< TypeAliasSpecifier & >( *mPTR ) ); |
| } |
| |
| const TypeAliasSpecifier & TypeSpecifier::alias() const |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as TypeAliasSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< const TypeAliasSpecifier & >( *mPTR ) ); |
| } |
| |
| |
| TypeAliasSpecifier * TypeSpecifier::rawAlias() const |
| { |
| return( static_cast< TypeAliasSpecifier * >( mPTR ) ); |
| } |
| |
| |
| BaseTypeSpecifier * TypeSpecifier::aliasTypeSpecifier() const |
| { |
| return( rawAlias()->targetTypeSpecifier() ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // BaseSymbolTypeSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| BaseSymbolTypeSpecifier * TypeSpecifier::rawSymbol() const |
| { |
| return( static_cast< BaseSymbolTypeSpecifier * >( mPTR ) ); |
| } |
| |
| |
| /** |
| * GETTER - SETTER |
| * theSymbolData |
| */ |
| void TypeSpecifier::saveSymbol(InstanceOfData * anInstance) |
| { |
| rawSymbol()->saveSymbolData( anInstance ); |
| } |
| |
| |
| const Symbol & TypeSpecifier::getSymbol( |
| const std::string & aFullyQualifiedNameID) const |
| { |
| return( rawSymbol()->getSymbolData( aFullyQualifiedNameID ) ); |
| } |
| |
| const Symbol & TypeSpecifier::getSymbolByQualifiedNameID( |
| const std::string & aQualifiedNameID) const |
| { |
| return( rawSymbol()->getDataByQualifiedNameID( aQualifiedNameID ) ); |
| } |
| |
| const Symbol & TypeSpecifier::getSymbolByNameID( |
| const std::string & aNameID) const |
| { |
| return( rawSymbol()->getDataByNameID( aNameID ) ); |
| } |
| |
| |
| const Symbol & TypeSpecifier::getSymbolByAstElement( |
| const ObjectElement * astElement) const |
| { |
| return( rawSymbol()->getDataByAstElement( astElement ) ); |
| } |
| |
| |
| bool TypeSpecifier::hasSymbol() const |
| { |
| return( is< BaseSymbolTypeSpecifier >() && |
| rawSymbol()->hasSymbolData() ); |
| } |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // ClassTypeSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| ClassTypeSpecifier & TypeSpecifier::classT() |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as ClassTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< ClassTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| const ClassTypeSpecifier & TypeSpecifier::classT() const |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as ClassTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< const ClassTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| |
| ClassTypeSpecifier * TypeSpecifier::rawClass() const |
| { |
| return( static_cast< ClassTypeSpecifier * >( mPTR ) ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // EnumTypeSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| EnumTypeSpecifier & TypeSpecifier::enumT() |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as EnumTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< EnumTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| const EnumTypeSpecifier & TypeSpecifier::enumT() const |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as EnumTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< const EnumTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| |
| EnumTypeSpecifier * TypeSpecifier::rawEnum() const |
| { |
| return( static_cast< EnumTypeSpecifier * >( mPTR ) ); |
| } |
| |
| |
| bool TypeSpecifier::hasSymbolDataWithValue(const BF & aValue) const |
| { |
| return( rawEnum()->hasSymbolDataWithValue(aValue) ); |
| } |
| |
| const Symbol & TypeSpecifier::getSymbolDataByValue(const BF & aValue) const |
| { |
| return( rawEnum()->getSymbolDataByValue(aValue) ); |
| } |
| |
| |
| avm_size_t TypeSpecifier::getRandomSymbolOffset() |
| { |
| return( rawEnum()->getRandomSymbolOffset() ); |
| } |
| |
| const Symbol & TypeSpecifier::getRandomSymbolData() |
| { |
| return( rawEnum()->getRandomSymbolData() ); |
| } |
| |
| const BF & TypeSpecifier::getRandomSymbolValue() |
| { |
| return( rawEnum()->getRandomSymbolValue() ); |
| } |
| |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // ContainerTypeSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| ContainerTypeSpecifier & TypeSpecifier::container() |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as ContainerTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< ContainerTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| const ContainerTypeSpecifier & TypeSpecifier::container() const |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as ContainerTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< const ContainerTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| |
| ContainerTypeSpecifier * TypeSpecifier::rawContainer() const |
| { |
| return( static_cast< ContainerTypeSpecifier * >( mPTR ) ); |
| } |
| |
| |
| /** |
| * theContentsTypeSpecifier |
| */ |
| const TypeSpecifier & TypeSpecifier::getContentsTypeSpecifier() const |
| { |
| return( rawContainer()->getContentsTypeSpecifier() ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // IntervalTypeSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| IntervalTypeSpecifier & TypeSpecifier::interval() |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as IntervalTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< IntervalTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| const IntervalTypeSpecifier & TypeSpecifier::interval() const |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as IntervalTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< const IntervalTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| |
| IntervalTypeSpecifier * TypeSpecifier::rawInterval() const |
| { |
| return( static_cast< IntervalTypeSpecifier * >( mPTR ) ); |
| } |
| |
| /** |
| * theIntervalTypeSpecifier |
| */ |
| const TypeSpecifier & TypeSpecifier::getSupportTypeSpecifier() const |
| { |
| return( rawInterval()->getSupportTypeSpecifier() ); |
| } |
| |
| |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| // UnionTypeSpecifier |
| //////////////////////////////////////////////////////////////////////////////// |
| //////////////////////////////////////////////////////////////////////////////// |
| |
| UnionTypeSpecifier & TypeSpecifier::unionT() |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as UnionTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< UnionTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| const UnionTypeSpecifier & TypeSpecifier::unionT() const |
| { |
| AVM_OS_ASSERT_FATAL_NULL_POINTER_EXIT( mPTR ) |
| << "Unexpected a <null> pointer as UnionTypeSpecifier reference !!!" |
| << SEND_EXIT; |
| |
| return( static_cast< const UnionTypeSpecifier & >( *mPTR ) ); |
| } |
| |
| |
| UnionTypeSpecifier * TypeSpecifier::rawUnion() const |
| { |
| return( static_cast< UnionTypeSpecifier * >( mPTR ) ); |
| } |
| |
| |
| |
| } /* namespace sep */ |