public class RecordType extends AssociativeType implements java.lang.Cloneable
Note that a record type with more fields is a subtype of a record type with a subset of the fields. For example, {x = double, y = int} is a subtype of {x = double}. When a record of type {x = double, y = int} is converted to one of type {x = double}, the extra field is preserved. The converted record, therefore, may have more fields than the type indicates, but not fewer.
A consequence of this is that all record types are subtypes of the empty record type. Hence, to require that a typeable object be a record type without specifying what the fields are, use
typeable.setTypeAtMost(BaseType.RECORD);Note, however, that by itself this type constraint will not be useful because it does not, by itself, prevent the type from resolving to unknown (the unknown type is at the bottom of the type lattice, and hence satisfies this type constraint). To force a port to resolve to the empty record type, you can state
typeable.setTypeEquals(BaseType.RECORD);Equivalently, in a port configurer dialog, you can set the type of a port to record, which references an empty record.
Red (cxh) |
Red (neuendor) |
Modifier and Type | Field and Description |
---|---|
static RecordType |
EMPTY_RECORD
An empty record.
|
MAXDEPTHBOUND
HASH_INVALID
Constructor and Description |
---|
RecordType(java.util.Map<java.lang.String,ptolemy.data.type.RecordType.FieldType> fieldMap)
Construct a RecordType with the labels and values specified by
a given Map object.
|
RecordType(java.lang.String[] labels,
Type[] types)
Construct a new RecordType with the specified labels and types.
|
Modifier and Type | Method and Description |
---|---|
protected int |
_compare(StructuredType type)
Compare this type with the specified type.
|
protected StructuredType |
_getRepresentative()
Return a static instance of RecordType.
|
protected StructuredType |
_greatestLowerBound(StructuredType type)
Return the greatest lower bound of this type with the specified
type.
|
protected StructuredType |
_leastUpperBound(StructuredType type)
Return the least Upper bound of this type with the specified
type.
|
java.lang.Object |
clone()
Return a deep copy of this RecordType if it is a variable, or
itself if it is a constant.
|
Token |
convert(Token token)
Convert the argument token into a RecordToken having this
type, if compatible.
|
int |
depth()
Return the depth of a record type.
|
boolean |
equals(java.lang.Object object)
Determine if the argument represents the same RecordType as this
object.
|
Type |
get(java.lang.String label)
Return the type of the specified label.
|
java.lang.Class<RecordToken> |
getTokenClass()
Return the class for tokens that this type represents.
|
InequalityTerm |
getTypeTerm(java.lang.String label)
Return the InequalityTerm representing the type of the specified
label.
|
int |
hashCode()
Return a hash code value for this object.
|
void |
initialize(Type type)
Set the elements that have declared type BaseType.UNKNOWN (the leaf
type variable) to the specified type.
|
boolean |
isAbstract()
Return true if this type does not correspond to a single token
class.
|
boolean |
isCompatible(Type type)
Test whether the argument type is compatible with this type
(is less than or equal to this type in the type lattice).
|
boolean |
isConstant()
Test if this RecordType is a constant.
|
boolean |
isInstantiable()
Test if this type corresponds to an instantiable token
class.
|
boolean |
isSubstitutionInstance(Type type)
Test whether the specified type is a substitution instance of this
type.
|
java.util.Set<java.lang.String> |
labelSet()
Return the labels of this record type as a Set.
|
java.lang.String |
toString()
Return the string representation of this type.
|
void |
updateType(StructuredType newType)
Update this Type to the specified RecordType.
|
add, divide, getTypeHash, modulo, multiply, one, subtract, zero
public static RecordType EMPTY_RECORD
public RecordType(java.lang.String[] labels, Type[] types)
labels
- An array of String.types
- An array of Type.java.lang.IllegalArgumentException
- If the two arrays do not have
the same size.java.lang.NullPointerException
- If one of the arguments is null.public RecordType(java.util.Map<java.lang.String,ptolemy.data.type.RecordType.FieldType> fieldMap) throws IllegalActionException
fieldMap
- A Map that has keys of type String and
values of type Token.IllegalActionException
- If the map contains null
keys or values, or if it contains non-String keys or non-Type
valuespublic java.lang.Object clone()
clone
in interface Type
clone
in class StructuredType
public Token convert(Token token) throws IllegalActionException
convert
in interface Type
token
- A token.IllegalActionException
- If token is incompatible
with this type.public int depth()
depth
in class StructuredType
public boolean equals(java.lang.Object object)
public Type get(java.lang.String label)
get
in class AssociativeType
label
- The specified label.public java.lang.Class<RecordToken> getTokenClass()
getTokenClass
in interface Type
public InequalityTerm getTypeTerm(java.lang.String label)
label
- The specified label.InequalityTerm
public int hashCode()
hashCode
in class java.lang.Object
public boolean isAbstract()
isAbstract
in interface Type
isAbstract
in class StructuredType
public void initialize(Type type)
initialize
in class StructuredType
type
- the type to set the leaf type variable to.public boolean isCompatible(Type type)
isCompatible
in interface Type
type
- An instance of Type.public boolean isConstant()
isConstant
in interface Type
public boolean isInstantiable()
isInstantiable
in interface Type
public boolean isSubstitutionInstance(Type type)
isSubstitutionInstance
in interface Type
type
- A Type.Type.isSubstitutionInstance(ptolemy.data.type.Type)
public java.util.Set<java.lang.String> labelSet()
public java.lang.String toString()
public void updateType(StructuredType newType) throws IllegalActionException
updateType
in class StructuredType
newType
- A StructuredType.IllegalActionException
- If the specified type is not a
RecordType or it does not have the same structure as this one.protected int _compare(StructuredType type)
_compare
in class StructuredType
type
- a RecordType.java.lang.IllegalArgumentException
- If the specified type is
not a RecordType.protected StructuredType _getRepresentative()
_getRepresentative
in class StructuredType
protected StructuredType _greatestLowerBound(StructuredType type)
_greatestLowerBound
in class StructuredType
type
- a RecordType.java.lang.IllegalArgumentException
- If the specified type is
not a RecordType.protected StructuredType _leastUpperBound(StructuredType type)
_leastUpperBound
in class StructuredType
type
- a RecordType.java.lang.IllegalArgumentException
- If the specified type is
not a RecordType.