scale.clef.type
Class ComplexType

java.lang.Object
  extended by scale.common.Root
      extended by scale.clef.Node
          extended by scale.clef.type.Type
              extended by scale.clef.type.AtomicType
                  extended by scale.clef.type.NumericType
                      extended by scale.clef.type.ComplexType
All Implemented Interfaces:
AnnotationInterface, DisplayNode

public class ComplexType
extends NumericType

This class represents the complex type with a real and an imaginary part.

$Id: ComplexType.java,v 1.51 2007-08-27 18:13:32 burrill Exp $

Copyright 2008 by the Scale Compiler Group,
Department of Computer Science
University of Massachusetts,
Amherst MA. 01003, USA
All Rights Reserved.


Method Summary
 int alignment(Machine machine)
          Calculate the alignment needed for this data type.
 int bitSize()
          Return the number of bits required to represent the type.
static void cleanup()
          Remove static lists of types.
static ComplexType create(int realMinbitSize, int imaginaryMinbitSize)
          Re-use an existing instance of a particular complex type.
 boolean equivalent(Type t)
          Return true if the types are equivalent.
 int getImaginaryMinbitSize()
          Return the minimum number of bits allowed for the imaginary part.
 RealType getImaginaryType()
          Return the real type for the real part of the complex value.
 int getRealMinbitSize()
          Return the minimum number of bits allowed for the real part.
 RealType getRealType()
          Return the real type for the real part of the complex value.
static java.util.Enumeration<ComplexType> getTypes()
          Return an enumeration of all the different types.
 boolean isComplexType()
          Return true if type represents a complex value.
 boolean isRealType()
          Return true if type represents a floating point value.
 java.lang.String mapTypeToCString()
          Map a type to a C string.
 java.lang.String mapTypeToF77String()
          Map a type to a Fortran string.
 long memorySize(Machine machine)
          Calculate how many addressable memory units are needed to represent the type.
 ComplexType returnComplexType()
          Return if this is a ComplexType return this.
 java.lang.String toString()
           
 void visit(Predicate p)
          Process a node by calling its associated routine.
 void visit(TypePredicate p)
          Process a node by calling its associated routine.
 
Methods inherited from class scale.clef.type.NumericType
isNumericType, returnNumericType
 
Methods inherited from class scale.clef.type.AtomicType
isAtomicType, returnAtomicType
 
Methods inherited from class scale.clef.type.Type
canBeInRegister, elementSize, getCompleteType, getCoreType, getDisplayColorHint, getDisplayLabel, getDisplayShapeHint, getEquivalentType, getNonAttributeType, getNonConstType, getPointedTo, getPointedToCore, getRank, getSignedType, getTag, getType, isAggregateType, isAllocArrayType, isArrayType, isAttributeSet, isBooleanType, isCharacterType, isClassType, isCompositeType, isConst, isEnumerationType, isFixedArrayType, isFloatType, isFortranCharType, isIncompleteType, isIntegerType, isNamedType, isPointerType, isProcedureType, isRefType, isRestricted, isSigned, isUnionType, isVoidType, isVolatile, memorySizeAsInt, nextVisit, numberOfElements, precedence, registerType, returnAggregateType, returnAllocArrayType, returnArrayType, returnBooleanType, returnCharacterType, returnCompositeType, returnEnumerationType, returnFixedArrayType, returnFloatType, returnFortranCharType, returnIncompleteType, returnIntegerType, returnPointerType, returnProcedureType, returnRealType, returnRecordType, returnRefType, returnSignedIntegerType, returnUnionType, returnUnsignedIntegerType, returnVoidType, setTag, setVisited, specifyCanBeInRegister, toStringShort, visited
 
Methods inherited from class scale.clef.Node
getChild, getDecl, getSourceLineNumber, numChildren, setAnnotationLevel, setReportLevel, setSourceLineNumber, toString, toStringChildren, toStringSpecial
 
Methods inherited from class scale.common.Root
addAnnotation, allAnnotations, allMatchingAnnotations, getAnnotation, getDisplayName, getDisplayString, getNodeCount, getNodeID, hasAnnotation, hasEqualAnnotation, hashCode, removeAnnotation, removeAnnotations, toStringAnnotations, toStringClass, trace, trace, trace
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, notify, notifyAll, wait, wait, wait
 

Method Detail

create

public static ComplexType create(int realMinbitSize,
                                 int imaginaryMinbitSize)
Re-use an existing instance of a particular complex type. If no equivalent complex type exists, create a new one.

Parameters:
realMinbitSize - is the minimum number of bits for the real part
imaginaryMinbitSize - is the minimum number of bits for the imaginary part

getRealMinbitSize

public final int getRealMinbitSize()
Return the minimum number of bits allowed for the real part.


getImaginaryMinbitSize

public final int getImaginaryMinbitSize()
Return the minimum number of bits allowed for the imaginary part.


getRealType

public RealType getRealType()
Return the real type for the real part of the complex value.


getImaginaryType

public RealType getImaginaryType()
Return the real type for the real part of the complex value.


bitSize

public int bitSize()
Description copied from class: AtomicType
Return the number of bits required to represent the type.

Specified by:
bitSize in class AtomicType

memorySize

public long memorySize(Machine machine)
Calculate how many addressable memory units are needed to represent the type.

Overrides:
memorySize in class AtomicType
Parameters:
machine - is the machine-specific data machine
Returns:
the number of bytes required to represent this type

alignment

public int alignment(Machine machine)
Calculate the alignment needed for this data type.

Overrides:
alignment in class AtomicType

isRealType

public boolean isRealType()
Return true if type represents a floating point value.

Overrides:
isRealType in class Type

returnComplexType

public final ComplexType returnComplexType()
Description copied from class: Type
Return if this is a ComplexType return this. Otherwise, return null.

Overrides:
returnComplexType in class Type

isComplexType

public boolean isComplexType()
Return true if type represents a complex value.

Overrides:
isComplexType in class Type

toString

public java.lang.String toString()
Overrides:
toString in class Type

visit

public void visit(Predicate p)
Description copied from class: Node
Process a node by calling its associated routine. See the "visitor" design pattern in Design Patterns: Elements of Reusable Object-Oriented Software by E. Gamma, et al, Addison Wesley, ISBN 0-201-63361-2.

Each class has a visit(Predicate p) method. For example, in class ABC:

   public void visit(Predicate p)
   {
     p.visitABC(this);
   }
 
and the class that implements Predicate has a method
   public void visitABC(Node n)
   {
     ABC a = (ABC) n;
     ...
   }
 
Thus, the class that implements Predicate can call
   n.visit(this);
 
where n is a Node sub-class without determining which specific sub-class n is. The visit pattern basically avoids implementing a large switch statement or defining different methods in each class for some purpose.

Overrides:
visit in class NumericType
See Also:
Predicate

visit

public void visit(TypePredicate p)
Description copied from class: Type
Process a node by calling its associated routine. See the "visitor" design pattern in Design Patterns: Elements of Reusable Object-Oriented Software by E. Gamma, et al, Addison Wesley, ISBN 0-201-63361-2.

Each type class has a visit(TypePredicate p) method. For example, in class ABC:

   public void visit(Predicate p)
   {
     p.visitABC(this);
   }
 
and the class that implements Predicate has a method
   public void visitABC(Node n)
   {
     ABC a = (ABC) n;
     ...
   }
 
Thus, the class that implements TypePredicate can call
   n.visit(this);
 
where n is a Node sub-class without determining which specific sub-class n is. The visit pattern basically avoids implementing a large switch statement or defining different methods in each class for some purpose.

Overrides:
visit in class NumericType
See Also:
TypePredicate

equivalent

public boolean equivalent(Type t)
Return true if the types are equivalent.

Specified by:
equivalent in class Type

getTypes

public static java.util.Enumeration<ComplexType> getTypes()
Return an enumeration of all the different types.


mapTypeToCString

public java.lang.String mapTypeToCString()
Map a type to a C string. The string representation is based upon the size of the type.

Overrides:
mapTypeToCString in class Type
Returns:
the string representation of the type

mapTypeToF77String

public java.lang.String mapTypeToF77String()
Map a type to a Fortran string. The string representation is based upon the size of the type.

Overrides:
mapTypeToF77String in class Type
Returns:
the string representation of the type

cleanup

public static void cleanup()
Remove static lists of types.