Package jahuwaldt.js.param
Class Parameter<Q extends javax.measure.quantity.Quantity>
- java.lang.Object
-
- jahuwaldt.js.param.Parameter<Q>
-
- Type Parameters:
Q- The Quantity (unit type, such as Length or Volume) of this parameter.
- All Implemented Interfaces:
java.io.Serializable,java.lang.Comparable<javax.measure.Measurable<Q>>,javax.measure.Measurable<Q>,javolution.lang.Immutable,javolution.lang.Realtime,javolution.lang.ValueType,javolution.xml.XMLSerializable,Field<Parameter<Q>>,GroupAdditive<Parameter<Q>>,GroupMultiplicative<Parameter<Q>>,Ring<Parameter<Q>>,Structure<Parameter<Q>>
public final class Parameter<Q extends javax.measure.quantity.Quantity> extends java.lang.Object implements javax.measure.Measurable<Q>, Field<Parameter<Q>>, javolution.lang.ValueType, javolution.lang.Realtime, javolution.xml.XMLSerializable
This class represents an amount (a value with associated units) for which operations such as addition, subtraction, multiplication and division can be performed (it implements the Field interface).The nature of an amount can be deduced from its parameterization (compile time) or its unit (run time)..
Operations between different amounts may or may not be authorized based upon the current PhysicalModel. For example, adding
Parameter<Length>andParameter<Duration>is not allowed by the StandardModel, but is authorized with the RelativisticModel.Modified by: Joseph A. Huwaldt
- Version:
- February 23, 2025
- Author:
- Joseph A. Huwaldt Date: November 15, 2008
- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static doubleEPSThe machine epsilon or unit roundoff fordoublein the Java environment.static doubleEPS10Ten times the machine epsilon or unit roundoff fordoublein the Java environment.static Parameter<javax.measure.quantity.Angle>HALFPI_ANGLEAn angular measure ofpi/2or 90 degrees.static Parameter<javax.measure.quantity.Dimensionless>ONEHolds a dimensionless measure of one.static Parameter<javax.measure.quantity.Angle>PI_ANGLEAn angular measure ofpior 180 degrees.static doubleSQRT_EPSThe square-root of EPS.static Parameter<javax.measure.quantity.Angle>TWOPI_ANGLEAn angular measure of2*pior 360 degrees.static Parameter<javax.measure.quantity.Dimensionless>ZEROHolds a dimensionless measure of zero.static Parameter<javax.measure.quantity.Acceleration>ZERO_ACCELERATIONAn acceleration measure of zero.static Parameter<javax.measure.quantity.Angle>ZERO_ANGLEAn angular measure of zero.static Parameter<javax.measure.quantity.Area>ZERO_AREAAn area measure of zero.static Parameter<javax.measure.quantity.Duration>ZERO_DURATIONA duration measure of zero.static Parameter<javax.measure.quantity.Force>ZERO_FORCEA force measure of zero.static Parameter<javax.measure.quantity.Length>ZERO_LENGTHAn length measure of zero.static Parameter<javax.measure.quantity.Velocity>ZERO_VELOCITYAn velocity measure of zero.static Parameter<javax.measure.quantity.Volume>ZERO_VOLUMEA volume measure of zero.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description Parameter<Q>abs()Returns the absolute value of this measure.static Parameter<javax.measure.quantity.Angle>acos(Parameter<javax.measure.quantity.Dimensionless> x)Returns the arc cosine of the specified value, in the range ofZERO_ANGLEthroughPI_ANGLE.static Parameter<javax.measure.quantity.Angle>asin(Parameter<javax.measure.quantity.Dimensionless> x)Returns the arc sine of the specified value, in the range of-HALFPI_ANGLEthroughHALFPI_ANGLE.<T extends javax.measure.quantity.Quantity>
Parameter<T>asType(java.lang.Class<T> type)Casts this Parameter to a parameterized unit of specified nature or throw aClassCastExceptionif the dimension of the specified quantity and this parameter's unit dimension do not match.static Parameter<javax.measure.quantity.Angle>atan(Parameter<javax.measure.quantity.Dimensionless> x)Returns the arc tangent of the specified value, in the range of-HALFPI_ANGLEthroughHALFPI_ANGLE.static <R extends javax.measure.quantity.Quantity>
Parameter<javax.measure.quantity.Angle>atan2(Parameter<R> y, Parameter<R> x)Returns the angle theta such that (x == cos(theta)) && (y == sin(theta)).intcompareTo(javax.measure.Measurable<Q> that)Compares this measure with the specified measurable object.static javax.measure.converter.UnitConverterconverterOf(javax.measure.unit.Unit<?> left, javax.measure.unit.Unit<?> right)Returns a unit converter that will convert between the specified units.Parameter<Q>copy()Returns a copy of this Parameter allocated by the calling thread (possibly on the stack).static Parameter<javax.measure.quantity.Dimensionless>cos(Parameter<javax.measure.quantity.Angle> angle)Returns the trigonometric cosine of the specified angle.Parameter<Q>divide(double divisor)Returns this measure divided by the specified approximate divisor (dimensionless).Parameter<? extends javax.measure.quantity.Quantity>divide(Parameter<?> that)Returns this measure divided by the one specified.doubledoubleValue(javax.measure.unit.Unit<Q> unit)Returns the value of this measurable stated in the specified unit as adouble.booleanequals(java.lang.Object that)Compares this parameter against the specified object for strict equality (same value and same units).javax.measure.unit.Unit<Q>getUnit()Returns the unit in which thevalueis stated.doublegetValue()Returns the value for this measure stated in this measure'sunit.doublegetValue(javax.measure.unit.Unit<Q> unit)Returns the value of this measurable stated in the specified unit as adouble.inthashCode()Returns the hash code for this parameter.Parameter<Q>inverse()Returns the multiplicative inverse of this measure.booleanisApproxEqual(Parameter<Q> that)Compares this measure with that measure for approximate equality.booleanisApproxEqual(Parameter<Q> that, Parameter<Q> tol)Compares this measure with that measure for approximate equality.booleanisApproxZero()Compares this measure with zero for approximate equality.booleanisGreaterThan(Parameter<Q> that)Indicates if this measure is ordered after that measure (independently of the measure unit).booleanisInfinite()Returnstrueif thisParametervalue is infinitely large in magnitude,falseotherwise.booleanisLargerThan(Parameter<Q> that)Compares this measure with that measure ignoring the sign.booleanisLessThan(Parameter<Q> that)Indicates if this measure is ordered before that measure (independently of the measure unit).booleanisNaN()Returnstrueif thisParametervalue is a Not-a-Number (NaN),falseotherwise.longlongValue(javax.measure.unit.Unit<Q> unit)Returns the estimated integer value of this measurable stated in the specified unit as along.static voidmain(java.lang.String[] args)Testing code for this class.Parameter<Q>max(Parameter<Q> that)Returns the maximum of this parameter and the specified one.Parameter<Q>min(Parameter<Q> that)Returns the minimum of this parameter and the specified one.Parameter<Q>minus(Parameter<Q> that)Returns the difference of this measure with the one specified.Parameter<Q>opposite()Returns the opposite of this measure.Parameter<Q>plus(Parameter<Q> that)Returns the sum of this measure with the one specified.Parameter<? extends javax.measure.quantity.Quantity>pow(int exp)Returns this measure raised at the specified exponent.static javax.measure.unit.Unit<?>productOf(javax.measure.unit.Unit<?> left, javax.measure.unit.Unit<?> right)Returns the product of the two input units.Parameter<? extends javax.measure.quantity.Quantity>root(int n)Returns the given root of this measure.Parameter<Q>round()Return a new parameter with the value of this parameter rounded to the nearest ones place.Parameter<Q>roundToPlace(int place)Return a new parameter with the value of this parameter rounded to the specified decimal place.static Parameter<javax.measure.quantity.Dimensionless>sin(Parameter<javax.measure.quantity.Angle> angle)Returns the trigonometric sine of the specified angle.Parameter<? extends javax.measure.quantity.Quantity>sqrt()Returns the square root of this measure.static Parameter<javax.measure.quantity.Dimensionless>tan(Parameter<javax.measure.quantity.Angle> angle)Returns the trigonometric tangent of the specified angle.Parameter<Q>times(double factor)Returns this measure scaled by the specified approximate factor (dimensionless).Parametertimes(Parameter that)Returns the product of this measure with the one specified.<R extends javax.measure.quantity.Quantity>
Parameter<R>to(javax.measure.unit.Unit<R> unit)Returns the measure equivalent to this measure but stated in the specified unit.java.lang.StringtoString()Returns the text representation of this parameter as ajava.lang.String.javolution.text.TexttoText()Returns the text representation of this parameter.static <Q extends javax.measure.quantity.Quantity>
Parameter<Q>valueOf(double value, javax.measure.unit.Unit<Q> unit)Returns the measure corresponding to a value (double) stated in the specified unit.static Parameter<?>valueOf(java.lang.CharSequence csq)Returns the measure represented by the specified character sequence.
-
-
-
Field Detail
-
EPS
public static final double EPS
The machine epsilon or unit roundoff fordoublein the Java environment. Machine epsilon gives an upper bound on the relative error due to rounding in floating point arithmetic.
-
EPS10
public static final double EPS10
Ten times the machine epsilon or unit roundoff fordoublein the Java environment. This is 10*EPS.- See Also:
EPS
-
ZERO
public static final Parameter<javax.measure.quantity.Dimensionless> ZERO
Holds a dimensionless measure of zero.
-
ONE
public static final Parameter<javax.measure.quantity.Dimensionless> ONE
Holds a dimensionless measure of one.
-
ZERO_ANGLE
public static final Parameter<javax.measure.quantity.Angle> ZERO_ANGLE
An angular measure of zero.
-
PI_ANGLE
public static final Parameter<javax.measure.quantity.Angle> PI_ANGLE
An angular measure ofpior 180 degrees.
-
HALFPI_ANGLE
public static final Parameter<javax.measure.quantity.Angle> HALFPI_ANGLE
An angular measure ofpi/2or 90 degrees.
-
TWOPI_ANGLE
public static final Parameter<javax.measure.quantity.Angle> TWOPI_ANGLE
An angular measure of2*pior 360 degrees.
-
ZERO_LENGTH
public static final Parameter<javax.measure.quantity.Length> ZERO_LENGTH
An length measure of zero.
-
ZERO_AREA
public static final Parameter<javax.measure.quantity.Area> ZERO_AREA
An area measure of zero.
-
ZERO_VOLUME
public static final Parameter<javax.measure.quantity.Volume> ZERO_VOLUME
A volume measure of zero.
-
ZERO_VELOCITY
public static final Parameter<javax.measure.quantity.Velocity> ZERO_VELOCITY
An velocity measure of zero.
-
ZERO_ACCELERATION
public static final Parameter<javax.measure.quantity.Acceleration> ZERO_ACCELERATION
An acceleration measure of zero.
-
ZERO_DURATION
public static final Parameter<javax.measure.quantity.Duration> ZERO_DURATION
A duration measure of zero.
-
ZERO_FORCE
public static final Parameter<javax.measure.quantity.Force> ZERO_FORCE
A force measure of zero.
-
-
Method Detail
-
valueOf
public static <Q extends javax.measure.quantity.Quantity> Parameter<Q> valueOf(double value, javax.measure.unit.Unit<Q> unit)
Returns the measure corresponding to a value (double) stated in the specified unit.- Type Parameters:
Q- The Quantity (unit type) of this parameter.- Parameters:
value- the value stated in the specified unit.unit- the unit in which the value is stated.- Returns:
- the corresponding measure object.
-
valueOf
public static Parameter<?> valueOf(java.lang.CharSequence csq)
Returns the measure represented by the specified character sequence.- Parameters:
csq- the character sequence.- Returns:
ParameterFormat.newInstance().parse(csq)
-
getUnit
public javax.measure.unit.Unit<Q> getUnit()
Returns the unit in which thevalueis stated.- Returns:
- the measure unit.
-
getValue
public double getValue()
Returns the value for this measure stated in this measure'sunit.- Returns:
- the value of the measure.
-
to
public <R extends javax.measure.quantity.Quantity> Parameter<R> to(javax.measure.unit.Unit<R> unit) throws javax.measure.converter.ConversionException
Returns the measure equivalent to this measure but stated in the specified unit.- Type Parameters:
R- The Quantity (unit type) to convert this parameter to.- Parameters:
unit- the unit of the measure to be returned.- Returns:
- a measure equivalent to this measure but stated in the specified unit.
- Throws:
javax.measure.converter.ConversionException- if the current model does not allows for conversion to the specified unit.
-
asType
public final <T extends javax.measure.quantity.Quantity> Parameter<T> asType(java.lang.Class<T> type) throws java.lang.ClassCastException
Casts this Parameter to a parameterized unit of specified nature or throw aClassCastExceptionif the dimension of the specified quantity and this parameter's unit dimension do not match.- Type Parameters:
T- The Quantity (unit type) to cast this parameter as.- Parameters:
type- the quantity class identifying the nature of the unit.- Returns:
- this Parameter parameterized with the specified type.
- Throws:
java.lang.ClassCastException- if the dimension of this parameter's unit is different from the specified quantity dimension.java.lang.UnsupportedOperationException- if the specified quantity class does not have a public static field named "UNIT" holding the standard unit for the quantity.
-
opposite
public Parameter<Q> opposite()
Returns the opposite of this measure.- Specified by:
oppositein interfaceGroupAdditive<Q extends javax.measure.quantity.Quantity>- Returns:
-this.
-
plus
public Parameter<Q> plus(Parameter<Q> that) throws javax.measure.converter.ConversionException
Returns the sum of this measure with the one specified.- Specified by:
plusin interfaceGroupAdditive<Q extends javax.measure.quantity.Quantity>- Parameters:
that- the measure to be added.- Returns:
this + that.- Throws:
javax.measure.converter.ConversionException- if the current model does not allows for these quantities to be added.
-
minus
public Parameter<Q> minus(Parameter<Q> that) throws javax.measure.converter.ConversionException
Returns the difference of this measure with the one specified.- Parameters:
that- the measure to be subtracted.- Returns:
this - that.- Throws:
javax.measure.converter.ConversionException- if the current model does not allows for these quantities to be subtracted.
-
times
public Parameter<Q> times(double factor)
Returns this measure scaled by the specified approximate factor (dimensionless).- Parameters:
factor- the scaling factor.- Returns:
this · factor.
-
times
public Parameter times(Parameter that)
Returns the product of this measure with the one specified.
-
inverse
public Parameter<Q> inverse()
Returns the multiplicative inverse of this measure. If this measure is possibly zero, then the result is unbounded (]-infinity, +infinity[).- Specified by:
inversein interfaceGroupMultiplicative<Q extends javax.measure.quantity.Quantity>- Returns:
1 / this.
-
divide
public Parameter<Q> divide(double divisor)
Returns this measure divided by the specified approximate divisor (dimensionless).- Parameters:
divisor- the approximated divisor.- Returns:
this / divisor.
-
divide
public Parameter<? extends javax.measure.quantity.Quantity> divide(Parameter<?> that)
Returns this measure divided by the one specified.- Parameters:
that- the measure divisor.- Returns:
this / that.
-
sqrt
public Parameter<? extends javax.measure.quantity.Quantity> sqrt()
Returns the square root of this measure.- Returns:
sqrt(this)
-
root
public Parameter<? extends javax.measure.quantity.Quantity> root(int n)
Returns the given root of this measure.- Parameters:
n- the root's order (n != 0).- Returns:
- the result of taking the given root of this quantity.
- Throws:
java.lang.ArithmeticException- ifn == 0.
-
pow
public Parameter<? extends javax.measure.quantity.Quantity> pow(int exp)
Returns this measure raised at the specified exponent.- Parameters:
exp- the exponent.- Returns:
thisexp
-
compareTo
public int compareTo(javax.measure.Measurable<Q> that)
Compares this measure with the specified measurable object.- Specified by:
compareToin interfacejava.lang.Comparable<Q extends javax.measure.quantity.Quantity>- Parameters:
that- the measure to compare with.- Returns:
- a negative integer, zero, or a positive integer as this measure is less than, equal to, or greater than that measurable.
- Throws:
javax.measure.converter.ConversionException- if the current model does not allows for these measure to be compared.
-
equals
public boolean equals(java.lang.Object that)
Compares this parameter against the specified object for strict equality (same value and same units).- Overrides:
equalsin classjava.lang.Object- Parameters:
that- the object to compare with.- Returns:
trueif this measure is identical to that measure;falseotherwise.
-
hashCode
public int hashCode()
Returns the hash code for this parameter.- Overrides:
hashCodein classjava.lang.Object- Returns:
- the hash code value.
-
isLessThan
public boolean isLessThan(Parameter<Q> that)
Indicates if this measure is ordered before that measure (independently of the measure unit).- Parameters:
that- The measure being compared with this one.- Returns:
- this < that
-
isGreaterThan
public boolean isGreaterThan(Parameter<Q> that)
Indicates if this measure is ordered after that measure (independently of the measure unit).- Parameters:
that- The measure being compared with this one.- Returns:
- this > that
-
isLargerThan
public boolean isLargerThan(Parameter<Q> that)
Compares this measure with that measure ignoring the sign.- Parameters:
that- The measure being compared with this one.- Returns:
|this| > |that|
-
isApproxEqual
public boolean isApproxEqual(Parameter<Q> that)
Compares this measure with that measure for approximate equality. Approximate equality means that the two parameters, stated in this parameter's units, differ by an amount less than the machine epsilon.- Parameters:
that- The measure being compared with this one.- Returns:
this ~= that
-
isApproxEqual
public boolean isApproxEqual(Parameter<Q> that, Parameter<Q> tol)
Compares this measure with that measure for approximate equality. Approximate equality means that the two parameters differ by an amount less than the supplied tolerance.- Parameters:
that- The measure being compared with this one.tol- The tolerance used to determine floating point equality. Ifnullis passed, then a tolerance of machine epsilon is assumed.- Returns:
this ~= that
-
isApproxZero
public boolean isApproxZero()
Compares this measure with zero for approximate equality. Approximately zero means that this parameter differs from zero by an amount less than machine epsilon.- Returns:
this ~= 0
-
min
public Parameter<Q> min(Parameter<Q> that)
Returns the minimum of this parameter and the specified one.- Parameters:
that- The measure being compared with this one.- Returns:
- The minimum of this parameter and the specified one.
-
max
public Parameter<Q> max(Parameter<Q> that)
Returns the maximum of this parameter and the specified one.- Parameters:
that- The measure being compared with this one.- Returns:
- The maximum of this parameter and the specified one.
-
round
public Parameter<Q> round()
Return a new parameter with the value of this parameter rounded to the nearest ones place.- Returns:
- A new parameter with the value of this parameter rounded.
-
roundToPlace
public Parameter<Q> roundToPlace(int place)
Return a new parameter with the value of this parameter rounded to the specified decimal place.- Parameters:
place- Number of decimal places to round the value to. A place of 1 rounds to 10's place, 2 to 100's place, -2 to 1/100th place, et cetera.- Returns:
- A new parameter with the value of this parameter rounded.
-
isNaN
public boolean isNaN()
Returnstrueif thisParametervalue is a Not-a-Number (NaN),falseotherwise.- Returns:
trueif the value represented by this object is NaN;falseotherwise.
-
isInfinite
public boolean isInfinite()
Returnstrueif thisParametervalue is infinitely large in magnitude,falseotherwise.- Returns:
trueif the value represented by this object is positive infinity or negative infinity;falseotherwise.
-
toText
public javolution.text.Text toText()
Returns the text representation of this parameter.- Specified by:
toTextin interfacejavolution.lang.Realtime- Returns:
ParameterFormat.newInstance().format(this)
-
toString
public final java.lang.String toString()
Returns the text representation of this parameter as ajava.lang.String.- Overrides:
toStringin classjava.lang.Object- Returns:
toText().toString()
-
doubleValue
public double doubleValue(javax.measure.unit.Unit<Q> unit)
Returns the value of this measurable stated in the specified unit as adouble. This is an alternate to getValue(unit).- Specified by:
doubleValuein interfacejavax.measure.Measurable<Q extends javax.measure.quantity.Quantity>- Parameters:
unit- the unit in which this measurable value is stated.- Returns:
- the numeric value after conversion to type
double. - See Also:
getValue(javax.measure.unit.Unit),getValue()
-
getValue
public double getValue(javax.measure.unit.Unit<Q> unit)
Returns the value of this measurable stated in the specified unit as adouble.- Parameters:
unit- the unit in which this measurable value is stated.- Returns:
- the numeric value after conversion to type
double. - See Also:
getValue()
-
longValue
public final long longValue(javax.measure.unit.Unit<Q> unit)
Returns the estimated integer value of this measurable stated in the specified unit as along.Note: This method differs from the
Number.longValue()in the sense that the closest integer value is returned and an ArithmeticException is raised instead of a bit truncation in case of overflow (safety critical).- Specified by:
longValuein interfacejavax.measure.Measurable<Q extends javax.measure.quantity.Quantity>- Parameters:
unit- the unit in which the measurable value is stated.- Returns:
- the numeric value after conversion to type
long. - Throws:
java.lang.ArithmeticException- if this quantity cannot be represented as alongnumber in the specified unit.
-
copy
public Parameter<Q> copy()
Returns a copy of this Parameter allocated by the calling thread (possibly on the stack).- Specified by:
copyin interfacejavolution.lang.ValueType- Returns:
- an identical and independent copy of this Parameter.
-
cos
public static Parameter<javax.measure.quantity.Dimensionless> cos(Parameter<javax.measure.quantity.Angle> angle)
Returns the trigonometric cosine of the specified angle.- Parameters:
angle- The angle to calculate the cosine of.- Returns:
- The cosine of the specified angle.
-
sin
public static Parameter<javax.measure.quantity.Dimensionless> sin(Parameter<javax.measure.quantity.Angle> angle)
Returns the trigonometric sine of the specified angle.- Parameters:
angle- The angle to calculate the sine of.- Returns:
- The sine of the specified angle.
-
tan
public static Parameter<javax.measure.quantity.Dimensionless> tan(Parameter<javax.measure.quantity.Angle> angle)
Returns the trigonometric tangent of the specified angle.- Parameters:
angle- The angle to calculate the tangent of.- Returns:
- The tangent of the specified angle.
-
asin
public static Parameter<javax.measure.quantity.Angle> asin(Parameter<javax.measure.quantity.Dimensionless> x)
Returns the arc sine of the specified value, in the range of-HALFPI_ANGLEthroughHALFPI_ANGLE.- Parameters:
x- The value to calculate the inverse-sine of.- Returns:
- The angle represented by the inverse-sine of the specified value.
-
acos
public static Parameter<javax.measure.quantity.Angle> acos(Parameter<javax.measure.quantity.Dimensionless> x)
Returns the arc cosine of the specified value, in the range ofZERO_ANGLEthroughPI_ANGLE.- Parameters:
x- The value to calculate the inverse-cosine of.- Returns:
- The angle represented by the inverse-cosine of the specified value.
-
atan
public static Parameter<javax.measure.quantity.Angle> atan(Parameter<javax.measure.quantity.Dimensionless> x)
Returns the arc tangent of the specified value, in the range of-HALFPI_ANGLEthroughHALFPI_ANGLE.- Parameters:
x- The value to calculate the inverse-tangent of.- Returns:
- The angle represented by the inverse-tangent of the specified value.
-
atan2
public static <R extends javax.measure.quantity.Quantity> Parameter<javax.measure.quantity.Angle> atan2(Parameter<R> y, Parameter<R> x)
Returns the angle theta such that (x == cos(theta)) && (y == sin(theta)). The two parameters must be the same type of unit, but otherwise they may be in different units of the same type (e.g.: y in "km" and x in "ft").- Type Parameters:
R- The Quantity (unit type) of the input parameters.- Parameters:
y- The the ordinate coordinate.x- The the abscissa coordinate.- Returns:
- The angle represented by the inverse-tangent of the specified values.
-
productOf
public static javax.measure.unit.Unit<?> productOf(javax.measure.unit.Unit<?> left, javax.measure.unit.Unit<?> right)
Returns the product of the two input units.- Parameters:
left- The left unit to multiply by the right unit.right- The right unit to multiply by the left unit.- Returns:
- The product of the two input units.
-
converterOf
public static javax.measure.converter.UnitConverter converterOf(javax.measure.unit.Unit<?> left, javax.measure.unit.Unit<?> right) throws javax.measure.converter.ConversionException
Returns a unit converter that will convert between the specified units.- Parameters:
left- The unit to convert from.right- The unit to convert to.- Returns:
- The converter between the specified units.
- Throws:
javax.measure.converter.ConversionException
-
main
public static void main(java.lang.String[] args)
Testing code for this class.- Parameters:
args- Command line arguments (not used).
-
-