Class SimpleUnit
- java.lang.Object
-
- uk.me.nxg.unity.OneUnit
-
- uk.me.nxg.unity.SimpleUnit
-
- All Implemented Interfaces:
java.lang.Comparable<OneUnit>
- Direct Known Subclasses:
SimpleBinaryUnit,SimpleDecimalUnit
public abstract class SimpleUnit extends OneUnit
A single simple unit, such as 'kg'. This is represented as a prefix, a base unit and an exponent. For example, the string "mm s^-2" will result in two SimpleUnit instances, one of which will have a base unit of "m" and a prefix power of -3, and the other of which will have a base unit of "s" and an exponent of -2.This represents the abstract unit, shorn of the symbols which were parsed to obtain it. Thus if, in some odd syntax, the symbol 'x' were used to denote metres, then the SimpleUnit instance which resulted would be the same as the OneUnit which resulted from a more conventional syntax.
Also, there is a potential ambiguity if a symbol is recognised in one syntax, but not in another. Thus if the string 'erg' were parsed in a syntax which didn't recognise that, then it would be stored as just that, an unrecognised symbol, not associated with the
UnitDefinitionfor the erg. Similarly, if a unit is parsed with guessing, then we may encounter a unit which is recognised in the sense ofOneUnit.isRecognisedUnit(), but not in the sense ofOneUnit.isRecognisedUnit(Syntax).The class's instances are immutable.
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description intcompareTo(OneUnit o)booleanequals(java.lang.Object o)Two units are equal if they have the same power, units and exponent.UnitDefinitiongetBaseUnitDefinition()Returns the known base unit.java.lang.StringgetBaseUnitName()Returns the name of this unit.java.lang.StringgetBaseUnitString()DimensionsgetDimensions()Return the dimensions of the unit, if it is a recognised one.java.lang.StringgetOriginalUnitString()Obtains the representation of the unit, as it originally appeared in the parsed input.intgetPrefix()Returns the prefix of the unit, as a base-ten log.inthashCode()booleanisRecognisedUnit()Indicates whether the base unit is one of those recognised in any syntax.booleanisRecognisedUnit(Syntax syntax)Indicates whether the base unit is one of those recognised within the specification of the given syntax.booleanisRecommendedUnit(Syntax syntax)Indicates whether the base unit is one of those recommended within the specification of the given syntax.booleansatisfiesUsageConstraints(Syntax syntax)Indicates whether the unit is being used in a way which satisfies any usage constraints.java.lang.StringtoDebugString()Write out the unit in a testable format.java.lang.StringtoString()Format this unit in readable form.java.lang.StringtoString(Syntax syntax)Format this unit in readable form, appropriate to the given syntax.java.lang.StringunitString()Obtains the string form of the unit, including prefix, with a default syntax.java.lang.StringunitString(Syntax syntax)Obtains the string representation of the unit, including prefix, in the given syntax.-
Methods inherited from class uk.me.nxg.unity.OneUnit
divide, getExponent, isQuoted, reciprocate, wasGuessed
-
-
-
-
Method Detail
-
getPrefix
public int getPrefix()
Returns the prefix of the unit, as a base-ten log. Thus a prefix of "m", for "milli", would produce a prefix of -3.
-
toString
public java.lang.String toString()
Description copied from class:OneUnitFormat this unit in readable form. The form is unspecified.This should not generally be used for formatted output – for that, it will more often be better to use
UnitExpr.toString().
-
toString
public java.lang.String toString(Syntax syntax) throws UnwritableExpression
Description copied from class:OneUnitFormat this unit in readable form, appropriate to the given syntax. The form is unspecified.This should not generally be used for formatted output – for that, it will more often be better to use
UnitExpr.toString().- Specified by:
toStringin classOneUnit- Parameters:
syntax- one of the known syntaxes- Returns:
- a string representation of the unit
- Throws:
UnwritableExpression- if the unit can't be written in the given syntax
-
unitString
public java.lang.String unitString(Syntax syntax) throws UnwritableExpression
Description copied from class:OneUnitObtains the string representation of the unit, including prefix, in the given syntax. That is, return ‘mm’ not ‘m’ or ‘metre’. If a unit has more than one representation in a given syntax, then this will produced the ‘preferred one’.This will fail, with a UnitParserException, in the rare cases where the unit string is inexpressible in the given syntax: for example the CDS syntax permits only the log function to be applied to a unit, and will fail if it is asked to display a different function.
- Specified by:
unitStringin classOneUnit- Parameters:
syntax- one of the syntaxes ofSyntax- Returns:
- a non-null string representation of the unit
- Throws:
UnwritableExpression- if the unit string is inexpressible in the given syntax
-
getBaseUnitDefinition
public UnitDefinition getBaseUnitDefinition()
Description copied from class:OneUnitReturns the known base unit. If the unit wasn't recognised as a known unit in the syntax in which the string was parsed, then this returns null, thoughOneUnit.getBaseUnitName()will not.Note that the ‘base unit’ is simply the unit without the prefix, and doesn't refer to the fundamental SI base units. Thus in the expression
"MW", it is ‘W’, Watt, that is the base unit.- Specified by:
getBaseUnitDefinitionin classOneUnit- Returns:
- a base unit
-
getBaseUnitName
public java.lang.String getBaseUnitName()
Description copied from class:OneUnitReturns the name of this unit. If the unit is a known one, then this will return a name for the unit such as ‘Metre’, or ‘Julian year’; if it is not, then this can do no more than return the unit symbol.This should be used for identification or similar purposes. To write out the unit you should generally use
UnitExpr.toString().- Specified by:
getBaseUnitNamein classOneUnit- Returns:
- the string name of this unit
-
getBaseUnitString
public java.lang.String getBaseUnitString()
-
getDimensions
public Dimensions getDimensions()
Description copied from class:OneUnitReturn the dimensions of the unit, if it is a recognised one. If this isn't a recognised unit, return null.- Specified by:
getDimensionsin classOneUnit- Returns:
- the dimensions of the unit, or null if these aren't avaiable
-
getOriginalUnitString
public java.lang.String getOriginalUnitString()
Description copied from class:OneUnitObtains the representation of the unit, as it originally appeared in the parsed input. This will differ from what is produced byunitStringif (a) the original was a dispreferred representation of a recognised unit (for example ‘yr’ vs ‘a’), or (b) if the unit was (successfully) guessed from an otherwise unrecognised string.- Specified by:
getOriginalUnitStringin classOneUnit- Returns:
- the original input representation of the unit
-
unitString
public java.lang.String unitString()
Obtains the string form of the unit, including prefix, with a default syntax. That is, return 'mm' not 'm'.The default syntax is (currently) the syntax with which this unit was originally read.
- Returns:
- a string representation of the unit
-
isRecognisedUnit
public boolean isRecognisedUnit(Syntax syntax)
Description copied from class:OneUnitIndicates whether the base unit is one of those recognised within the specification of the given syntax. In this context, ‘recognised’ means ‘mentioned in the specification’, so deprecated units count as recognised ones.Note that this checks that the unit is a recognised one: we don't (currently) check whether the abbreviation that got us here is a recommended one (for example, ‘pixel’ is a valid FITS/CDS name for pixels, and ‘pix’ is a FITS and OGIP one). This also means that if we guessed a unit, and that unit is a recognised one in this syntax, then this method returns true.
If the syntax is Syntax.ALL, then this checks whether this is a recognised unit in any syntax.
- Specified by:
isRecognisedUnitin classOneUnit- Parameters:
syntax- one of the syntaxes ofSyntax- Returns:
- true if the unit is recognised
- See Also:
OneUnit.isRecommendedUnit(uk.me.nxg.unity.Syntax)
-
isRecognisedUnit
public boolean isRecognisedUnit()
Description copied from class:OneUnitIndicates whether the base unit is one of those recognised in any syntax.This is equivalent to
isRecognisedUnit(Syntax.ALL). If this method returns true, thenOneUnit.getBaseUnitDefinition()would return non-null, and vice versa if this method returns false.- Specified by:
isRecognisedUnitin classOneUnit- Returns:
- true if the unit is recognised
-
isRecommendedUnit
public boolean isRecommendedUnit(Syntax syntax)
Description copied from class:OneUnitIndicates whether the base unit is one of those recommended within the specification of the given syntax. In this context, ‘recommended’ means ‘mentioned in the specification’ and not deprecated. Thus all ‘recommended’ units are also a fortiori ‘recognised’.Note that this checks that the unit is a recommended one: we don't (currently) check whether the abbreviation that got us here is a recommended one (for example, "pixel" is a valid FITS/CDS name for pixels, and "pix" is a FITS and OGIP one). This also means that if we guessed a unit, and that unit is a recommended one in this syntax, then this method returns true.
- Specified by:
isRecommendedUnitin classOneUnit- Parameters:
syntax- one of the syntaxes ofSyntax- Returns:
- true if the unit is a recommended one
- See Also:
OneUnit.isRecognisedUnit(uk.me.nxg.unity.Syntax)
-
satisfiesUsageConstraints
public boolean satisfiesUsageConstraints(Syntax syntax)
Description copied from class:OneUnitIndicates whether the unit is being used in a way which satisfies any usage constraints. Principally, this tests whether a unit which may not be used with SI prefixes was provided with a prefix, but there may be other constraints present.An unrecognised unit has no constraints, and so will always satisfy them; this extends to units which are unrecognised in a particular syntax.
- Specified by:
satisfiesUsageConstraintsin classOneUnit- Parameters:
syntax- one of the syntaxes ofSyntax- Returns:
- true if the unit satisfies its usage constraints
-
toDebugString
public java.lang.String toDebugString()
Description copied from class:OneUnitWrite out the unit in a testable format. This is for debugging and testing.- Specified by:
toDebugStringin classOneUnit- Returns:
- a string representation of the unit
-
equals
public boolean equals(java.lang.Object o)
Two units are equal if they have the same power, units and exponent. They don't have to have been obtained from the same syntax, so that in a syntax which (for example) permitted both "yr" and "a" for years, two SimpleUnit instances, obtained from parsing the two alternatives, would be regarded as equal.- Overrides:
equalsin classjava.lang.Object
-
compareTo
public int compareTo(OneUnit o)
-
hashCode
public int hashCode()
- Overrides:
hashCodein classjava.lang.Object
-
-