View Javadoc
1   package org.djunits.value.vfloat.vector;
2   
3   import java.util.List;
4   import java.util.Map;
5   
6   import org.djunits.unit.AbsorbedDoseUnit;
7   import org.djunits.unit.AccelerationUnit;
8   import org.djunits.unit.AmountOfSubstanceUnit;
9   import org.djunits.unit.AngleUnit;
10  import org.djunits.unit.AngularAccelerationUnit;
11  import org.djunits.unit.AngularVelocityUnit;
12  import org.djunits.unit.AreaUnit;
13  import org.djunits.unit.CatalyticActivityUnit;
14  import org.djunits.unit.DensityUnit;
15  import org.djunits.unit.DimensionlessUnit;
16  import org.djunits.unit.DurationUnit;
17  import org.djunits.unit.ElectricalCapacitanceUnit;
18  import org.djunits.unit.ElectricalChargeUnit;
19  import org.djunits.unit.ElectricalConductanceUnit;
20  import org.djunits.unit.ElectricalCurrentUnit;
21  import org.djunits.unit.ElectricalInductanceUnit;
22  import org.djunits.unit.ElectricalPotentialUnit;
23  import org.djunits.unit.ElectricalResistanceUnit;
24  import org.djunits.unit.EnergyUnit;
25  import org.djunits.unit.EquivalentDoseUnit;
26  import org.djunits.unit.FlowMassUnit;
27  import org.djunits.unit.FlowVolumeUnit;
28  import org.djunits.unit.ForceUnit;
29  import org.djunits.unit.FrequencyUnit;
30  import org.djunits.unit.IlluminanceUnit;
31  import org.djunits.unit.LengthUnit;
32  import org.djunits.unit.LinearDensityUnit;
33  import org.djunits.unit.LuminousFluxUnit;
34  import org.djunits.unit.LuminousIntensityUnit;
35  import org.djunits.unit.MagneticFluxDensityUnit;
36  import org.djunits.unit.MagneticFluxUnit;
37  import org.djunits.unit.MassUnit;
38  import org.djunits.unit.MomentumUnit;
39  import org.djunits.unit.PowerUnit;
40  import org.djunits.unit.PressureUnit;
41  import org.djunits.unit.RadioActivityUnit;
42  import org.djunits.unit.SIUnit;
43  import org.djunits.unit.SolidAngleUnit;
44  import org.djunits.unit.SpeedUnit;
45  import org.djunits.unit.TemperatureUnit;
46  import org.djunits.unit.TorqueUnit;
47  import org.djunits.unit.Unit;
48  import org.djunits.unit.VolumeUnit;
49  import org.djunits.unit.scale.IdentityScale;
50  import org.djunits.unit.si.SIDimensions;
51  import org.djunits.unit.util.UnitRuntimeException;
52  import org.djunits.value.storage.StorageType;
53  import org.djunits.value.vfloat.scalar.FloatSIScalar;
54  import org.djunits.value.vfloat.vector.base.FloatVectorRel;
55  import org.djunits.value.vfloat.vector.data.FloatVectorData;
56  import org.djutils.exceptions.Throw;
57  
58  import jakarta.annotation.Generated;
59  
60  /**
61   * Easy access methods for the generic Relative SI FloatVector.
62   * <p>
63   * Copyright (c) 2013-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. <br>
64   * All rights reserved. <br>
65   * BSD-style license. See <a href="https://djunits.org/docs/license.html">DJUNITS License</a>.
66   * </p>
67   * @author <a href="https://www.tudelft.nl/averbraeck">Alexander Verbraeck</a>
68   * @author <a href="https://www.tudelft.nl/staff/p.knoppers/">Peter Knoppers</a>
69   */
70  @Generated(value = "org.djunits.generator.GenerateDJUNIT", date = "2023-07-23T14:06:38.224104100Z")
71  public class FloatSIVector extends FloatVectorRel<SIUnit, FloatSIScalar, FloatSIVector>
72  {
73      /** */
74      private static final long serialVersionUID = 20150901L;
75  
76      /**
77       * Construct a FloatSIVector from an internal data object.
78       * @param data FloatVectorData; the internal data object for the vector
79       * @param displayUnit SIUnit; the display unit of the vector data
80       */
81      public FloatSIVector(final FloatVectorData data, final SIUnit displayUnit)
82      {
83          super(data, displayUnit);
84      }
85  
86      /* ****************************** CONSTRUCTORS WITH float[] ****************************** */
87  
88      /**
89       * Construct a FloatSIVector from a float[] object. The float values are expressed in the displayUnit, and will be printed
90       * using the displayUnit.
91       * @param data float[]; the data for the vector, expressed in the displayUnit
92       * @param displayUnit SIUnit; the unit of the values in the data array, and display unit when printing
93       * @param storageType StorageType; the StorageType (SPARSE or DENSE) to use for constructing the Vector
94       */
95      public FloatSIVector(final float[] data, final SIUnit displayUnit, final StorageType storageType)
96      {
97          this(FloatVectorData.instantiate(data, displayUnit.getScale(), storageType), displayUnit);
98      }
99  
100     /**
101      * Construct a FloatSIVector from a float[] object. The float values are expressed in the displayUnit. Assume that the
102      * StorageType is DENSE since we offer the data as an array.
103      * @param data float[]; the data for the vector
104      * @param displayUnit SIUnit; the unit of the values in the data array, and display unit when printing
105      */
106     public FloatSIVector(final float[] data, final SIUnit displayUnit)
107     {
108         this(data, displayUnit, StorageType.DENSE);
109     }
110 
111     /* ****************************** CONSTRUCTORS WITH FloatSIScalar[] ****************************** */
112 
113     /**
114      * Construct a FloatSIVector from an array of FloatSIScalar objects. The FloatSIScalar values are each expressed in their
115      * own unit, but will be internally stored as SI values, all expressed in the displayUnit when printing.
116      * @param data FloatSIScalar[]; the data for the vector
117      * @param displayUnit SIUnit; the display unit of the values when printing
118      * @param storageType StorageType; the StorageType (SPARSE or DENSE) to use for constructing the Vector
119      */
120     public FloatSIVector(final FloatSIScalar[] data, final SIUnit displayUnit, final StorageType storageType)
121     {
122         this(FloatVectorData.instantiate(data, storageType), displayUnit);
123     }
124 
125     /**
126      * Construct a FloatSIVector from an array of FloatSIScalar objects. The FloatSIScalar values are each expressed in their
127      * own unit, but will be internally stored as SI values, all expressed in the displayUnit when printing. Assume that the
128      * StorageType is DENSE since we offer the data as an array.
129      * @param data FloatSIScalar[]; the data for the vector
130      * @param displayUnit SIUnit; the display unit of the values when printing
131      */
132     public FloatSIVector(final FloatSIScalar[] data, final SIUnit displayUnit)
133     {
134         this(data, displayUnit, StorageType.DENSE);
135     }
136 
137     /* ****************************** CONSTRUCTORS WITH List<Float> or List<FloatSIScalar> ****************************** */
138 
139     /**
140      * Construct a FloatSIVector from a list of Number objects or a list of FloatSIScalar objects. Note that the displayUnit has
141      * a different meaning depending on whether the list contains Number objects (e.g., Float objects) or FloatSIScalar objects.
142      * In case the list contains Number objects, the displayUnit indicates the unit in which the values in the list are
143      * expressed, as well as the unit in which they will be printed. In case the list contains FloatSIScalar objects, each
144      * FloatSIScalar has its own unit, and the displayUnit is just used for printing. The values but will always be internally
145      * stored as SI values or base values, and expressed using the display unit or base unit when printing.
146      * @param data List&lt;Float&gt; or List&lt;SIScalar&gt;; the data for the vector
147      * @param displayUnit SIUnit; the display unit of the vector data, and the unit of the data points when the data is
148      *            expressed as List&lt;Float&gt; or List&lt;Number&gt; in general
149      * @param storageType StorageType; the StorageType (SPARSE or DENSE) to use for constructing the Vector
150      */
151     public FloatSIVector(final List<? extends Number> data, final SIUnit displayUnit, final StorageType storageType)
152     {
153         this(data.size() == 0 ? FloatVectorData.instantiate(new float[] {}, IdentityScale.SCALE, storageType)
154                 : data.get(0) instanceof FloatSIScalar ? FloatVectorData.instantiate(data, IdentityScale.SCALE, storageType)
155                         : FloatVectorData.instantiate(data, displayUnit.getScale(), storageType),
156                 displayUnit);
157     }
158 
159     /**
160      * Construct a FloatSIVector from a list of Number objects or a list of FloatSIScalar objects. Note that the displayUnit has
161      * a different meaning depending on whether the list contains Number objects (e.g., Float objects) or FloatSIScalar objects.
162      * In case the list contains Number objects, the displayUnit indicates the unit in which the values in the list are
163      * expressed, as well as the unit in which they will be printed. In case the list contains FloatSIScalar objects, each
164      * FloatSIScalar has its own unit, and the displayUnit is just used for printing. The values but will always be internally
165      * stored as SI values or base values, and expressed using the display unit or base unit when printing. Assume the storage
166      * type is DENSE since we offer the data as a List.
167      * @param data List&lt;Float&gt; or List&lt;SIScalar&gt;; the data for the vector
168      * @param displayUnit SIUnit; the display unit of the vector data, and the unit of the data points when the data is
169      *            expressed as List&lt;Float&gt; or List&lt;Number&gt; in general
170      */
171     public FloatSIVector(final List<? extends Number> data, final SIUnit displayUnit)
172     {
173         this(data, displayUnit, StorageType.DENSE);
174     }
175 
176     /* ******************** CONSTRUCTORS WITH Map<Integer, Float> or Map<Integer, FloatSIScalar> ******************** */
177 
178     /**
179      * Construct a FloatSIVector from a (sparse) map of index values to Number objects or a (sparse) map of index values to of
180      * FloatSIScalar objects. Using index values is particularly useful for sparse vectors. The size parameter indicates the
181      * size of the vector, since the largest index does not have to be part of the map. Note that the displayUnit has a
182      * different meaning depending on whether the map contains Number objects (e.g., Float objects) or FloatSIScalar objects. In
183      * case the map contains Number objects, the displayUnit indicates the unit in which the values in the map are expressed, as
184      * well as the unit in which they will be printed. In case the map contains FloatSIScalar objects, each FloatSIScalar has
185      * its own unit, and the displayUnit is just used for printing. The values but will always be internally stored as SI values
186      * or base values, and expressed using the display unit or base unit when printing.
187      * @param data Map&lt;Integer, Float&gt; or Map&lt;Integer, FloatSIScalar&gt;; the data for the vector
188      * @param size int; the size off the vector, i.e., the highest index
189      * @param displayUnit SIUnit; the display unit of the vector data, and the unit of the data points when the data is
190      *            expressed as List&lt;Float&gt; or List&lt;Number&gt; in general
191      * @param storageType StorageType; the StorageType (SPARSE or DENSE) to use for constructing the Vector
192      */
193     public FloatSIVector(final Map<Integer, ? extends Number> data, final int size, final SIUnit displayUnit,
194             final StorageType storageType)
195     {
196         this(data.size() == 0 ? FloatVectorData.instantiate(data, size, IdentityScale.SCALE, storageType)
197                 : data.values().iterator().next() instanceof FloatSIScalar
198                         ? FloatVectorData.instantiate(data, size, IdentityScale.SCALE, storageType)
199                         : FloatVectorData.instantiate(data, size, displayUnit.getScale(), storageType),
200                 displayUnit);
201     }
202 
203     /**
204      * Construct a FloatSIVector from a (sparse) map of index values to Number objects or a (sparse) map of index values to of
205      * FloatSIScalar objects. Using index values is particularly useful for sparse vectors. The size parameter indicates the
206      * size of the vector, since the largest index does not have to be part of the map. Note that the displayUnit has a
207      * different meaning depending on whether the map contains Number objects (e.g., Float objects) or FloatSIScalar objects. In
208      * case the map contains Number objects, the displayUnit indicates the unit in which the values in the map are expressed, as
209      * well as the unit in which they will be printed. In case the map contains FloatSIScalar objects, each FloatSIScalar has
210      * its own unit, and the displayUnit is just used for printing. The values but will always be internally stored as SI values
211      * or base values, and expressed using the display unit or base unit when printing. Assume the storage type is SPARSE since
212      * we offer the data as a Map.
213      * @param data Map&lt;Integer, Float&gt; or Map&lt;Integer, FloatSIScalar&gt;; the data for the vector
214      * @param size int; the size off the vector, i.e., the highest index
215      * @param displayUnit SIUnit; the display unit of the vector data, and the unit of the data points when the data is
216      *            expressed as List&lt;Float&gt; or List&lt;Number&gt; in general
217      */
218     public FloatSIVector(final Map<Integer, ? extends Number> data, final int size, final SIUnit displayUnit)
219     {
220         this(data, size, displayUnit, StorageType.SPARSE);
221     }
222 
223     /* ****************************** Other methods ****************************** */
224 
225     /** {@inheritDoc} */
226     @Override
227     public Class<FloatSIScalar> getScalarClass()
228     {
229         return FloatSIScalar.class;
230     }
231 
232     /**
233      * Returns a FloatSIVector based on an array of values and the textual representation of the unit.
234      * @param value float[]; the values to use
235      * @param unitString String; the textual representation of the unit
236      * @param storageType StorageType; the storage type to use
237      * @return FloatSIVector; the vector representation of the values in their unit
238      * @throws IllegalArgumentException when the unit cannot be parsed or is incorrect
239      * @throws NullPointerException when the unitString argument is null
240      */
241     public static FloatSIVector of(final float[] value, final String unitString, final StorageType storageType)
242     {
243         Throw.whenNull(value, "Error parsing FloatSIVector: value is null");
244         Throw.whenNull(unitString, "Error parsing FloatSIVector: unitString is null");
245         Throw.whenNull(storageType, "Error parsing FloatSIVector: storageType is null");
246         try
247         {
248             SIUnit unit = Unit.lookupOrCreateUnitWithSIDimensions(SIDimensions.of(unitString));
249             if (unit != null)
250             {
251                 return new FloatSIVector(value, unit, storageType);
252             }
253         }
254         catch (Exception exception)
255         {
256             throw new IllegalArgumentException("Error parsing SIUnit from " + unitString, exception);
257         }
258         throw new IllegalArgumentException("Error parsing FloatSIVector with unit " + unitString);
259     }
260 
261     /**
262      * Returns a FloatSIVector based on an array of values and the textual representation of the unit.
263      * @param valueList List&lt;Float&gt;; the values to use
264      * @param unitString String; the textual representation of the unit
265      * @param storageType StorageType; the storage type to use
266      * @return FloatSIVector; the vector representation of the values in their unit
267      * @throws IllegalArgumentException when the unit cannot be parsed or is incorrect
268      * @throws NullPointerException when the unitString argument is null
269      */
270     public static FloatSIVector of(final List<Float> valueList, final String unitString, final StorageType storageType)
271     {
272         Throw.whenNull(valueList, "Error parsing FloatSIVector: valueList is null");
273         Throw.whenNull(unitString, "Error parsing FloatSIVector: unitString is null");
274         Throw.whenNull(storageType, "Error parsing FloatSIVector: storageType is null");
275         try
276         {
277             SIUnit unit = Unit.lookupOrCreateUnitWithSIDimensions(SIDimensions.of(unitString));
278             if (unit != null)
279             {
280                 return new FloatSIVector(valueList, unit, storageType);
281             }
282         }
283         catch (Exception exception)
284         {
285             throw new IllegalArgumentException("Error parsing SIUnit from " + unitString, exception);
286         }
287         throw new IllegalArgumentException("Error parsing FloatSIVector with unit " + unitString);
288     }
289 
290     /**
291      * Returns a FloatSIVector based on a (sparse) map of values and the textual representation of the unit.
292      * @param valueMap Map&lt;Integer, Float&gt;; the values to use
293      * @param unitString String; the textual representation of the unit
294      * @param length int; the size of the vector
295      * @param storageType StorageType; the storage type to use
296      * @return FloatSIVector; the vector representation of the values in their unit
297      * @throws IllegalArgumentException when the unit cannot be parsed or is incorrect
298      * @throws NullPointerException when the unitString argument is null
299      */
300     public static FloatSIVector of(final Map<Integer, Float> valueMap, final String unitString, final int length,
301             final StorageType storageType)
302     {
303         Throw.whenNull(valueMap, "Error parsing FloatSIVector: valueMap is null");
304         Throw.whenNull(unitString, "Error parsing FloatSIVector: unitString is null");
305         Throw.whenNull(storageType, "Error parsing FloatSIVector: storageType is null");
306         try
307         {
308             SIUnit unit = Unit.lookupOrCreateUnitWithSIDimensions(SIDimensions.of(unitString));
309             if (unit != null)
310             {
311                 return new FloatSIVector(valueMap, length, unit, storageType);
312             }
313         }
314         catch (Exception exception)
315         {
316             throw new IllegalArgumentException("Error parsing SIUnit from " + unitString, exception);
317         }
318         throw new IllegalArgumentException("Error parsing FloatSIVector with unit " + unitString);
319     }
320 
321     /** {@inheritDoc} */
322     @Override
323     public FloatSIVector instantiateVector(final FloatVectorData fvd, final SIUnit unit)
324     {
325         return new FloatSIVector(fvd, unit);
326     }
327 
328     /** {@inheritDoc} */
329     @Override
330     public FloatSIScalar instantiateScalarSI(final float valueSI, final SIUnit unit)
331     {
332         return new FloatSIScalar(valueSI, unit);
333     }
334 
335     /** {@inheritDoc} */
336     @Override
337     public String toString(final SIUnit displayUnit, final boolean verbose, final boolean withUnit)
338     {
339         return super.toString(displayUnit, verbose, withUnit).replaceAll("!", "");
340     }
341 
342     /**********************************************************************************/
343     /******************************** 'CAST AS' METHODS *******************************/
344     /**********************************************************************************/
345 
346     /**
347      * Return the current vector as a absorbeddose vector.
348      * @return FloatAbsorbedDoseVector; the current vector as a absorbeddose vector
349      */
350     public final FloatAbsorbedDoseVector asAbsorbedDose()
351     {
352         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AbsorbedDoseUnit.BASE.getSiDimensions())),
353                 UnitRuntimeException.class, "cannot cast %s to FloatAbsorbedDoseVector", this.toString());
354         return new FloatAbsorbedDoseVector(this.data, AbsorbedDoseUnit.SI);
355     }
356 
357     /**
358      * Return the current vector as a absorbeddose vector, and provide a display unit.
359      * @param displayUnit the unit in which the value will be displayed
360      * @return FloatAbsorbedDoseVector; the current vector as a absorbeddose vector
361      */
362     public final FloatAbsorbedDoseVector asAbsorbedDose(final AbsorbedDoseUnit displayUnit)
363     {
364         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AbsorbedDoseUnit.BASE.getSiDimensions())),
365                 UnitRuntimeException.class, "cannot cast %s to FloatAbsorbedDoseVector", this.toString());
366         FloatAbsorbedDoseVector result = new FloatAbsorbedDoseVector(this.data, displayUnit.getStandardUnit());
367         result.setDisplayUnit(displayUnit);
368         return result;
369     }
370 
371     /**
372      * Return the current vector as a acceleration vector.
373      * @return FloatAccelerationVector; the current vector as a acceleration vector
374      */
375     public final FloatAccelerationVector asAcceleration()
376     {
377         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AccelerationUnit.BASE.getSiDimensions())),
378                 UnitRuntimeException.class, "cannot cast %s to FloatAccelerationVector", this.toString());
379         return new FloatAccelerationVector(this.data, AccelerationUnit.SI);
380     }
381 
382     /**
383      * Return the current vector as a acceleration vector, and provide a display unit.
384      * @param displayUnit the unit in which the value will be displayed
385      * @return FloatAccelerationVector; the current vector as a acceleration vector
386      */
387     public final FloatAccelerationVector asAcceleration(final AccelerationUnit displayUnit)
388     {
389         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AccelerationUnit.BASE.getSiDimensions())),
390                 UnitRuntimeException.class, "cannot cast %s to FloatAccelerationVector", this.toString());
391         FloatAccelerationVector result = new FloatAccelerationVector(this.data, displayUnit.getStandardUnit());
392         result.setDisplayUnit(displayUnit);
393         return result;
394     }
395 
396     /**
397      * Return the current vector as a amountofsubstance vector.
398      * @return FloatAmountOfSubstanceVector; the current vector as a amountofsubstance vector
399      */
400     public final FloatAmountOfSubstanceVector asAmountOfSubstance()
401     {
402         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AmountOfSubstanceUnit.BASE.getSiDimensions())),
403                 UnitRuntimeException.class, "cannot cast %s to FloatAmountOfSubstanceVector", this.toString());
404         return new FloatAmountOfSubstanceVector(this.data, AmountOfSubstanceUnit.SI);
405     }
406 
407     /**
408      * Return the current vector as a amountofsubstance vector, and provide a display unit.
409      * @param displayUnit the unit in which the value will be displayed
410      * @return FloatAmountOfSubstanceVector; the current vector as a amountofsubstance vector
411      */
412     public final FloatAmountOfSubstanceVector asAmountOfSubstance(final AmountOfSubstanceUnit displayUnit)
413     {
414         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AmountOfSubstanceUnit.BASE.getSiDimensions())),
415                 UnitRuntimeException.class, "cannot cast %s to FloatAmountOfSubstanceVector", this.toString());
416         FloatAmountOfSubstanceVector result = new FloatAmountOfSubstanceVector(this.data, displayUnit.getStandardUnit());
417         result.setDisplayUnit(displayUnit);
418         return result;
419     }
420 
421     /**
422      * Return the current vector as a angularacceleration vector.
423      * @return FloatAngularAccelerationVector; the current vector as a angularacceleration vector
424      */
425     public final FloatAngularAccelerationVector asAngularAcceleration()
426     {
427         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularAccelerationUnit.BASE.getSiDimensions())),
428                 UnitRuntimeException.class, "cannot cast %s to FloatAngularAccelerationVector", this.toString());
429         return new FloatAngularAccelerationVector(this.data, AngularAccelerationUnit.SI);
430     }
431 
432     /**
433      * Return the current vector as a angularacceleration vector, and provide a display unit.
434      * @param displayUnit the unit in which the value will be displayed
435      * @return FloatAngularAccelerationVector; the current vector as a angularacceleration vector
436      */
437     public final FloatAngularAccelerationVector asAngularAcceleration(final AngularAccelerationUnit displayUnit)
438     {
439         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularAccelerationUnit.BASE.getSiDimensions())),
440                 UnitRuntimeException.class, "cannot cast %s to FloatAngularAccelerationVector", this.toString());
441         FloatAngularAccelerationVector result = new FloatAngularAccelerationVector(this.data, displayUnit.getStandardUnit());
442         result.setDisplayUnit(displayUnit);
443         return result;
444     }
445 
446     /**
447      * Return the current vector as a angularvelocity vector.
448      * @return FloatAngularVelocityVector; the current vector as a angularvelocity vector
449      */
450     public final FloatAngularVelocityVector asAngularVelocity()
451     {
452         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularVelocityUnit.BASE.getSiDimensions())),
453                 UnitRuntimeException.class, "cannot cast %s to FloatAngularVelocityVector", this.toString());
454         return new FloatAngularVelocityVector(this.data, AngularVelocityUnit.SI);
455     }
456 
457     /**
458      * Return the current vector as a angularvelocity vector, and provide a display unit.
459      * @param displayUnit the unit in which the value will be displayed
460      * @return FloatAngularVelocityVector; the current vector as a angularvelocity vector
461      */
462     public final FloatAngularVelocityVector asAngularVelocity(final AngularVelocityUnit displayUnit)
463     {
464         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngularVelocityUnit.BASE.getSiDimensions())),
465                 UnitRuntimeException.class, "cannot cast %s to FloatAngularVelocityVector", this.toString());
466         FloatAngularVelocityVector result = new FloatAngularVelocityVector(this.data, displayUnit.getStandardUnit());
467         result.setDisplayUnit(displayUnit);
468         return result;
469     }
470 
471     /**
472      * Return the current vector as a area vector.
473      * @return FloatAreaVector; the current vector as a area vector
474      */
475     public final FloatAreaVector asArea()
476     {
477         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AreaUnit.BASE.getSiDimensions())),
478                 UnitRuntimeException.class, "cannot cast %s to FloatAreaVector", this.toString());
479         return new FloatAreaVector(this.data, AreaUnit.SI);
480     }
481 
482     /**
483      * Return the current vector as a area vector, and provide a display unit.
484      * @param displayUnit the unit in which the value will be displayed
485      * @return FloatAreaVector; the current vector as a area vector
486      */
487     public final FloatAreaVector asArea(final AreaUnit displayUnit)
488     {
489         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AreaUnit.BASE.getSiDimensions())),
490                 UnitRuntimeException.class, "cannot cast %s to FloatAreaVector", this.toString());
491         FloatAreaVector result = new FloatAreaVector(this.data, displayUnit.getStandardUnit());
492         result.setDisplayUnit(displayUnit);
493         return result;
494     }
495 
496     /**
497      * Return the current vector as a catalyticactivity vector.
498      * @return FloatCatalyticActivityVector; the current vector as a catalyticactivity vector
499      */
500     public final FloatCatalyticActivityVector asCatalyticActivity()
501     {
502         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(CatalyticActivityUnit.BASE.getSiDimensions())),
503                 UnitRuntimeException.class, "cannot cast %s to FloatCatalyticActivityVector", this.toString());
504         return new FloatCatalyticActivityVector(this.data, CatalyticActivityUnit.SI);
505     }
506 
507     /**
508      * Return the current vector as a catalyticactivity vector, and provide a display unit.
509      * @param displayUnit the unit in which the value will be displayed
510      * @return FloatCatalyticActivityVector; the current vector as a catalyticactivity vector
511      */
512     public final FloatCatalyticActivityVector asCatalyticActivity(final CatalyticActivityUnit displayUnit)
513     {
514         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(CatalyticActivityUnit.BASE.getSiDimensions())),
515                 UnitRuntimeException.class, "cannot cast %s to FloatCatalyticActivityVector", this.toString());
516         FloatCatalyticActivityVector result = new FloatCatalyticActivityVector(this.data, displayUnit.getStandardUnit());
517         result.setDisplayUnit(displayUnit);
518         return result;
519     }
520 
521     /**
522      * Return the current vector as a density vector.
523      * @return FloatDensityVector; the current vector as a density vector
524      */
525     public final FloatDensityVector asDensity()
526     {
527         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DensityUnit.BASE.getSiDimensions())),
528                 UnitRuntimeException.class, "cannot cast %s to FloatDensityVector", this.toString());
529         return new FloatDensityVector(this.data, DensityUnit.SI);
530     }
531 
532     /**
533      * Return the current vector as a density vector, and provide a display unit.
534      * @param displayUnit the unit in which the value will be displayed
535      * @return FloatDensityVector; the current vector as a density vector
536      */
537     public final FloatDensityVector asDensity(final DensityUnit displayUnit)
538     {
539         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DensityUnit.BASE.getSiDimensions())),
540                 UnitRuntimeException.class, "cannot cast %s to FloatDensityVector", this.toString());
541         FloatDensityVector result = new FloatDensityVector(this.data, displayUnit.getStandardUnit());
542         result.setDisplayUnit(displayUnit);
543         return result;
544     }
545 
546     /**
547      * Return the current vector as a dimensionless vector.
548      * @return FloatDimensionlessVector; the current vector as a dimensionless vector
549      */
550     public final FloatDimensionlessVector asDimensionless()
551     {
552         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DimensionlessUnit.BASE.getSiDimensions())),
553                 UnitRuntimeException.class, "cannot cast %s to FloatDimensionlessVector", this.toString());
554         return new FloatDimensionlessVector(this.data, DimensionlessUnit.SI);
555     }
556 
557     /**
558      * Return the current vector as a dimensionless vector, and provide a display unit.
559      * @param displayUnit the unit in which the value will be displayed
560      * @return FloatDimensionlessVector; the current vector as a dimensionless vector
561      */
562     public final FloatDimensionlessVector asDimensionless(final DimensionlessUnit displayUnit)
563     {
564         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DimensionlessUnit.BASE.getSiDimensions())),
565                 UnitRuntimeException.class, "cannot cast %s to FloatDimensionlessVector", this.toString());
566         FloatDimensionlessVector result = new FloatDimensionlessVector(this.data, displayUnit.getStandardUnit());
567         result.setDisplayUnit(displayUnit);
568         return result;
569     }
570 
571     /**
572      * Return the current vector as a electricalcapacitance vector.
573      * @return FloatElectricalCapacitanceVector; the current vector as a electricalcapacitance vector
574      */
575     public final FloatElectricalCapacitanceVector asElectricalCapacitance()
576     {
577         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCapacitanceUnit.BASE.getSiDimensions())),
578                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalCapacitanceVector", this.toString());
579         return new FloatElectricalCapacitanceVector(this.data, ElectricalCapacitanceUnit.SI);
580     }
581 
582     /**
583      * Return the current vector as a electricalcapacitance vector, and provide a display unit.
584      * @param displayUnit the unit in which the value will be displayed
585      * @return FloatElectricalCapacitanceVector; the current vector as a electricalcapacitance vector
586      */
587     public final FloatElectricalCapacitanceVector asElectricalCapacitance(final ElectricalCapacitanceUnit displayUnit)
588     {
589         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCapacitanceUnit.BASE.getSiDimensions())),
590                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalCapacitanceVector", this.toString());
591         FloatElectricalCapacitanceVector result =
592                 new FloatElectricalCapacitanceVector(this.data, displayUnit.getStandardUnit());
593         result.setDisplayUnit(displayUnit);
594         return result;
595     }
596 
597     /**
598      * Return the current vector as a electricalcharge vector.
599      * @return FloatElectricalChargeVector; the current vector as a electricalcharge vector
600      */
601     public final FloatElectricalChargeVector asElectricalCharge()
602     {
603         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalChargeUnit.BASE.getSiDimensions())),
604                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalChargeVector", this.toString());
605         return new FloatElectricalChargeVector(this.data, ElectricalChargeUnit.SI);
606     }
607 
608     /**
609      * Return the current vector as a electricalcharge vector, and provide a display unit.
610      * @param displayUnit the unit in which the value will be displayed
611      * @return FloatElectricalChargeVector; the current vector as a electricalcharge vector
612      */
613     public final FloatElectricalChargeVector asElectricalCharge(final ElectricalChargeUnit displayUnit)
614     {
615         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalChargeUnit.BASE.getSiDimensions())),
616                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalChargeVector", this.toString());
617         FloatElectricalChargeVector result = new FloatElectricalChargeVector(this.data, displayUnit.getStandardUnit());
618         result.setDisplayUnit(displayUnit);
619         return result;
620     }
621 
622     /**
623      * Return the current vector as a electricalconductance vector.
624      * @return FloatElectricalConductanceVector; the current vector as a electricalconductance vector
625      */
626     public final FloatElectricalConductanceVector asElectricalConductance()
627     {
628         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalConductanceUnit.BASE.getSiDimensions())),
629                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalConductanceVector", this.toString());
630         return new FloatElectricalConductanceVector(this.data, ElectricalConductanceUnit.SI);
631     }
632 
633     /**
634      * Return the current vector as a electricalconductance vector, and provide a display unit.
635      * @param displayUnit the unit in which the value will be displayed
636      * @return FloatElectricalConductanceVector; the current vector as a electricalconductance vector
637      */
638     public final FloatElectricalConductanceVector asElectricalConductance(final ElectricalConductanceUnit displayUnit)
639     {
640         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalConductanceUnit.BASE.getSiDimensions())),
641                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalConductanceVector", this.toString());
642         FloatElectricalConductanceVector result =
643                 new FloatElectricalConductanceVector(this.data, displayUnit.getStandardUnit());
644         result.setDisplayUnit(displayUnit);
645         return result;
646     }
647 
648     /**
649      * Return the current vector as a electricalcurrent vector.
650      * @return FloatElectricalCurrentVector; the current vector as a electricalcurrent vector
651      */
652     public final FloatElectricalCurrentVector asElectricalCurrent()
653     {
654         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCurrentUnit.BASE.getSiDimensions())),
655                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalCurrentVector", this.toString());
656         return new FloatElectricalCurrentVector(this.data, ElectricalCurrentUnit.SI);
657     }
658 
659     /**
660      * Return the current vector as a electricalcurrent vector, and provide a display unit.
661      * @param displayUnit the unit in which the value will be displayed
662      * @return FloatElectricalCurrentVector; the current vector as a electricalcurrent vector
663      */
664     public final FloatElectricalCurrentVector asElectricalCurrent(final ElectricalCurrentUnit displayUnit)
665     {
666         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalCurrentUnit.BASE.getSiDimensions())),
667                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalCurrentVector", this.toString());
668         FloatElectricalCurrentVector result = new FloatElectricalCurrentVector(this.data, displayUnit.getStandardUnit());
669         result.setDisplayUnit(displayUnit);
670         return result;
671     }
672 
673     /**
674      * Return the current vector as a electricalinductance vector.
675      * @return FloatElectricalInductanceVector; the current vector as a electricalinductance vector
676      */
677     public final FloatElectricalInductanceVector asElectricalInductance()
678     {
679         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalInductanceUnit.BASE.getSiDimensions())),
680                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalInductanceVector", this.toString());
681         return new FloatElectricalInductanceVector(this.data, ElectricalInductanceUnit.SI);
682     }
683 
684     /**
685      * Return the current vector as a electricalinductance vector, and provide a display unit.
686      * @param displayUnit the unit in which the value will be displayed
687      * @return FloatElectricalInductanceVector; the current vector as a electricalinductance vector
688      */
689     public final FloatElectricalInductanceVector asElectricalInductance(final ElectricalInductanceUnit displayUnit)
690     {
691         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalInductanceUnit.BASE.getSiDimensions())),
692                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalInductanceVector", this.toString());
693         FloatElectricalInductanceVector result = new FloatElectricalInductanceVector(this.data, displayUnit.getStandardUnit());
694         result.setDisplayUnit(displayUnit);
695         return result;
696     }
697 
698     /**
699      * Return the current vector as a electricalpotential vector.
700      * @return FloatElectricalPotentialVector; the current vector as a electricalpotential vector
701      */
702     public final FloatElectricalPotentialVector asElectricalPotential()
703     {
704         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalPotentialUnit.BASE.getSiDimensions())),
705                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalPotentialVector", this.toString());
706         return new FloatElectricalPotentialVector(this.data, ElectricalPotentialUnit.SI);
707     }
708 
709     /**
710      * Return the current vector as a electricalpotential vector, and provide a display unit.
711      * @param displayUnit the unit in which the value will be displayed
712      * @return FloatElectricalPotentialVector; the current vector as a electricalpotential vector
713      */
714     public final FloatElectricalPotentialVector asElectricalPotential(final ElectricalPotentialUnit displayUnit)
715     {
716         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalPotentialUnit.BASE.getSiDimensions())),
717                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalPotentialVector", this.toString());
718         FloatElectricalPotentialVector result = new FloatElectricalPotentialVector(this.data, displayUnit.getStandardUnit());
719         result.setDisplayUnit(displayUnit);
720         return result;
721     }
722 
723     /**
724      * Return the current vector as a electricalresistance vector.
725      * @return FloatElectricalResistanceVector; the current vector as a electricalresistance vector
726      */
727     public final FloatElectricalResistanceVector asElectricalResistance()
728     {
729         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalResistanceUnit.BASE.getSiDimensions())),
730                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalResistanceVector", this.toString());
731         return new FloatElectricalResistanceVector(this.data, ElectricalResistanceUnit.SI);
732     }
733 
734     /**
735      * Return the current vector as a electricalresistance vector, and provide a display unit.
736      * @param displayUnit the unit in which the value will be displayed
737      * @return FloatElectricalResistanceVector; the current vector as a electricalresistance vector
738      */
739     public final FloatElectricalResistanceVector asElectricalResistance(final ElectricalResistanceUnit displayUnit)
740     {
741         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ElectricalResistanceUnit.BASE.getSiDimensions())),
742                 UnitRuntimeException.class, "cannot cast %s to FloatElectricalResistanceVector", this.toString());
743         FloatElectricalResistanceVector result = new FloatElectricalResistanceVector(this.data, displayUnit.getStandardUnit());
744         result.setDisplayUnit(displayUnit);
745         return result;
746     }
747 
748     /**
749      * Return the current vector as a energy vector.
750      * @return FloatEnergyVector; the current vector as a energy vector
751      */
752     public final FloatEnergyVector asEnergy()
753     {
754         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EnergyUnit.BASE.getSiDimensions())),
755                 UnitRuntimeException.class, "cannot cast %s to FloatEnergyVector", this.toString());
756         return new FloatEnergyVector(this.data, EnergyUnit.SI);
757     }
758 
759     /**
760      * Return the current vector as a energy vector, and provide a display unit.
761      * @param displayUnit the unit in which the value will be displayed
762      * @return FloatEnergyVector; the current vector as a energy vector
763      */
764     public final FloatEnergyVector asEnergy(final EnergyUnit displayUnit)
765     {
766         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EnergyUnit.BASE.getSiDimensions())),
767                 UnitRuntimeException.class, "cannot cast %s to FloatEnergyVector", this.toString());
768         FloatEnergyVector result = new FloatEnergyVector(this.data, displayUnit.getStandardUnit());
769         result.setDisplayUnit(displayUnit);
770         return result;
771     }
772 
773     /**
774      * Return the current vector as a equivalentdose vector.
775      * @return FloatEquivalentDoseVector; the current vector as a equivalentdose vector
776      */
777     public final FloatEquivalentDoseVector asEquivalentDose()
778     {
779         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EquivalentDoseUnit.BASE.getSiDimensions())),
780                 UnitRuntimeException.class, "cannot cast %s to FloatEquivalentDoseVector", this.toString());
781         return new FloatEquivalentDoseVector(this.data, EquivalentDoseUnit.SI);
782     }
783 
784     /**
785      * Return the current vector as a equivalentdose vector, and provide a display unit.
786      * @param displayUnit the unit in which the value will be displayed
787      * @return FloatEquivalentDoseVector; the current vector as a equivalentdose vector
788      */
789     public final FloatEquivalentDoseVector asEquivalentDose(final EquivalentDoseUnit displayUnit)
790     {
791         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(EquivalentDoseUnit.BASE.getSiDimensions())),
792                 UnitRuntimeException.class, "cannot cast %s to FloatEquivalentDoseVector", this.toString());
793         FloatEquivalentDoseVector result = new FloatEquivalentDoseVector(this.data, displayUnit.getStandardUnit());
794         result.setDisplayUnit(displayUnit);
795         return result;
796     }
797 
798     /**
799      * Return the current vector as a flowmass vector.
800      * @return FloatFlowMassVector; the current vector as a flowmass vector
801      */
802     public final FloatFlowMassVector asFlowMass()
803     {
804         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowMassUnit.BASE.getSiDimensions())),
805                 UnitRuntimeException.class, "cannot cast %s to FloatFlowMassVector", this.toString());
806         return new FloatFlowMassVector(this.data, FlowMassUnit.SI);
807     }
808 
809     /**
810      * Return the current vector as a flowmass vector, and provide a display unit.
811      * @param displayUnit the unit in which the value will be displayed
812      * @return FloatFlowMassVector; the current vector as a flowmass vector
813      */
814     public final FloatFlowMassVector asFlowMass(final FlowMassUnit displayUnit)
815     {
816         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowMassUnit.BASE.getSiDimensions())),
817                 UnitRuntimeException.class, "cannot cast %s to FloatFlowMassVector", this.toString());
818         FloatFlowMassVector result = new FloatFlowMassVector(this.data, displayUnit.getStandardUnit());
819         result.setDisplayUnit(displayUnit);
820         return result;
821     }
822 
823     /**
824      * Return the current vector as a flowvolume vector.
825      * @return FloatFlowVolumeVector; the current vector as a flowvolume vector
826      */
827     public final FloatFlowVolumeVector asFlowVolume()
828     {
829         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowVolumeUnit.BASE.getSiDimensions())),
830                 UnitRuntimeException.class, "cannot cast %s to FloatFlowVolumeVector", this.toString());
831         return new FloatFlowVolumeVector(this.data, FlowVolumeUnit.SI);
832     }
833 
834     /**
835      * Return the current vector as a flowvolume vector, and provide a display unit.
836      * @param displayUnit the unit in which the value will be displayed
837      * @return FloatFlowVolumeVector; the current vector as a flowvolume vector
838      */
839     public final FloatFlowVolumeVector asFlowVolume(final FlowVolumeUnit displayUnit)
840     {
841         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FlowVolumeUnit.BASE.getSiDimensions())),
842                 UnitRuntimeException.class, "cannot cast %s to FloatFlowVolumeVector", this.toString());
843         FloatFlowVolumeVector result = new FloatFlowVolumeVector(this.data, displayUnit.getStandardUnit());
844         result.setDisplayUnit(displayUnit);
845         return result;
846     }
847 
848     /**
849      * Return the current vector as a force vector.
850      * @return FloatForceVector; the current vector as a force vector
851      */
852     public final FloatForceVector asForce()
853     {
854         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ForceUnit.BASE.getSiDimensions())),
855                 UnitRuntimeException.class, "cannot cast %s to FloatForceVector", this.toString());
856         return new FloatForceVector(this.data, ForceUnit.SI);
857     }
858 
859     /**
860      * Return the current vector as a force vector, and provide a display unit.
861      * @param displayUnit the unit in which the value will be displayed
862      * @return FloatForceVector; the current vector as a force vector
863      */
864     public final FloatForceVector asForce(final ForceUnit displayUnit)
865     {
866         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(ForceUnit.BASE.getSiDimensions())),
867                 UnitRuntimeException.class, "cannot cast %s to FloatForceVector", this.toString());
868         FloatForceVector result = new FloatForceVector(this.data, displayUnit.getStandardUnit());
869         result.setDisplayUnit(displayUnit);
870         return result;
871     }
872 
873     /**
874      * Return the current vector as a frequency vector.
875      * @return FloatFrequencyVector; the current vector as a frequency vector
876      */
877     public final FloatFrequencyVector asFrequency()
878     {
879         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FrequencyUnit.BASE.getSiDimensions())),
880                 UnitRuntimeException.class, "cannot cast %s to FloatFrequencyVector", this.toString());
881         return new FloatFrequencyVector(this.data, FrequencyUnit.SI);
882     }
883 
884     /**
885      * Return the current vector as a frequency vector, and provide a display unit.
886      * @param displayUnit the unit in which the value will be displayed
887      * @return FloatFrequencyVector; the current vector as a frequency vector
888      */
889     public final FloatFrequencyVector asFrequency(final FrequencyUnit displayUnit)
890     {
891         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(FrequencyUnit.BASE.getSiDimensions())),
892                 UnitRuntimeException.class, "cannot cast %s to FloatFrequencyVector", this.toString());
893         FloatFrequencyVector result = new FloatFrequencyVector(this.data, displayUnit.getStandardUnit());
894         result.setDisplayUnit(displayUnit);
895         return result;
896     }
897 
898     /**
899      * Return the current vector as a illuminance vector.
900      * @return FloatIlluminanceVector; the current vector as a illuminance vector
901      */
902     public final FloatIlluminanceVector asIlluminance()
903     {
904         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(IlluminanceUnit.BASE.getSiDimensions())),
905                 UnitRuntimeException.class, "cannot cast %s to FloatIlluminanceVector", this.toString());
906         return new FloatIlluminanceVector(this.data, IlluminanceUnit.SI);
907     }
908 
909     /**
910      * Return the current vector as a illuminance vector, and provide a display unit.
911      * @param displayUnit the unit in which the value will be displayed
912      * @return FloatIlluminanceVector; the current vector as a illuminance vector
913      */
914     public final FloatIlluminanceVector asIlluminance(final IlluminanceUnit displayUnit)
915     {
916         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(IlluminanceUnit.BASE.getSiDimensions())),
917                 UnitRuntimeException.class, "cannot cast %s to FloatIlluminanceVector", this.toString());
918         FloatIlluminanceVector result = new FloatIlluminanceVector(this.data, displayUnit.getStandardUnit());
919         result.setDisplayUnit(displayUnit);
920         return result;
921     }
922 
923     /**
924      * Return the current vector as a lineardensity vector.
925      * @return FloatLinearDensityVector; the current vector as a lineardensity vector
926      */
927     public final FloatLinearDensityVector asLinearDensity()
928     {
929         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LinearDensityUnit.BASE.getSiDimensions())),
930                 UnitRuntimeException.class, "cannot cast %s to FloatLinearDensityVector", this.toString());
931         return new FloatLinearDensityVector(this.data, LinearDensityUnit.SI);
932     }
933 
934     /**
935      * Return the current vector as a lineardensity vector, and provide a display unit.
936      * @param displayUnit the unit in which the value will be displayed
937      * @return FloatLinearDensityVector; the current vector as a lineardensity vector
938      */
939     public final FloatLinearDensityVector asLinearDensity(final LinearDensityUnit displayUnit)
940     {
941         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LinearDensityUnit.BASE.getSiDimensions())),
942                 UnitRuntimeException.class, "cannot cast %s to FloatLinearDensityVector", this.toString());
943         FloatLinearDensityVector result = new FloatLinearDensityVector(this.data, displayUnit.getStandardUnit());
944         result.setDisplayUnit(displayUnit);
945         return result;
946     }
947 
948     /**
949      * Return the current vector as a luminousflux vector.
950      * @return FloatLuminousFluxVector; the current vector as a luminousflux vector
951      */
952     public final FloatLuminousFluxVector asLuminousFlux()
953     {
954         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousFluxUnit.BASE.getSiDimensions())),
955                 UnitRuntimeException.class, "cannot cast %s to FloatLuminousFluxVector", this.toString());
956         return new FloatLuminousFluxVector(this.data, LuminousFluxUnit.SI);
957     }
958 
959     /**
960      * Return the current vector as a luminousflux vector, and provide a display unit.
961      * @param displayUnit the unit in which the value will be displayed
962      * @return FloatLuminousFluxVector; the current vector as a luminousflux vector
963      */
964     public final FloatLuminousFluxVector asLuminousFlux(final LuminousFluxUnit displayUnit)
965     {
966         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousFluxUnit.BASE.getSiDimensions())),
967                 UnitRuntimeException.class, "cannot cast %s to FloatLuminousFluxVector", this.toString());
968         FloatLuminousFluxVector result = new FloatLuminousFluxVector(this.data, displayUnit.getStandardUnit());
969         result.setDisplayUnit(displayUnit);
970         return result;
971     }
972 
973     /**
974      * Return the current vector as a luminousintensity vector.
975      * @return FloatLuminousIntensityVector; the current vector as a luminousintensity vector
976      */
977     public final FloatLuminousIntensityVector asLuminousIntensity()
978     {
979         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousIntensityUnit.BASE.getSiDimensions())),
980                 UnitRuntimeException.class, "cannot cast %s to FloatLuminousIntensityVector", this.toString());
981         return new FloatLuminousIntensityVector(this.data, LuminousIntensityUnit.SI);
982     }
983 
984     /**
985      * Return the current vector as a luminousintensity vector, and provide a display unit.
986      * @param displayUnit the unit in which the value will be displayed
987      * @return FloatLuminousIntensityVector; the current vector as a luminousintensity vector
988      */
989     public final FloatLuminousIntensityVector asLuminousIntensity(final LuminousIntensityUnit displayUnit)
990     {
991         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LuminousIntensityUnit.BASE.getSiDimensions())),
992                 UnitRuntimeException.class, "cannot cast %s to FloatLuminousIntensityVector", this.toString());
993         FloatLuminousIntensityVector result = new FloatLuminousIntensityVector(this.data, displayUnit.getStandardUnit());
994         result.setDisplayUnit(displayUnit);
995         return result;
996     }
997 
998     /**
999      * Return the current vector as a magneticfluxdensity vector.
1000      * @return FloatMagneticFluxDensityVector; the current vector as a magneticfluxdensity vector
1001      */
1002     public final FloatMagneticFluxDensityVector asMagneticFluxDensity()
1003     {
1004         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxDensityUnit.BASE.getSiDimensions())),
1005                 UnitRuntimeException.class, "cannot cast %s to FloatMagneticFluxDensityVector", this.toString());
1006         return new FloatMagneticFluxDensityVector(this.data, MagneticFluxDensityUnit.SI);
1007     }
1008 
1009     /**
1010      * Return the current vector as a magneticfluxdensity vector, and provide a display unit.
1011      * @param displayUnit the unit in which the value will be displayed
1012      * @return FloatMagneticFluxDensityVector; the current vector as a magneticfluxdensity vector
1013      */
1014     public final FloatMagneticFluxDensityVector asMagneticFluxDensity(final MagneticFluxDensityUnit displayUnit)
1015     {
1016         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxDensityUnit.BASE.getSiDimensions())),
1017                 UnitRuntimeException.class, "cannot cast %s to FloatMagneticFluxDensityVector", this.toString());
1018         FloatMagneticFluxDensityVector result = new FloatMagneticFluxDensityVector(this.data, displayUnit.getStandardUnit());
1019         result.setDisplayUnit(displayUnit);
1020         return result;
1021     }
1022 
1023     /**
1024      * Return the current vector as a magneticflux vector.
1025      * @return FloatMagneticFluxVector; the current vector as a magneticflux vector
1026      */
1027     public final FloatMagneticFluxVector asMagneticFlux()
1028     {
1029         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxUnit.BASE.getSiDimensions())),
1030                 UnitRuntimeException.class, "cannot cast %s to FloatMagneticFluxVector", this.toString());
1031         return new FloatMagneticFluxVector(this.data, MagneticFluxUnit.SI);
1032     }
1033 
1034     /**
1035      * Return the current vector as a magneticflux vector, and provide a display unit.
1036      * @param displayUnit the unit in which the value will be displayed
1037      * @return FloatMagneticFluxVector; the current vector as a magneticflux vector
1038      */
1039     public final FloatMagneticFluxVector asMagneticFlux(final MagneticFluxUnit displayUnit)
1040     {
1041         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MagneticFluxUnit.BASE.getSiDimensions())),
1042                 UnitRuntimeException.class, "cannot cast %s to FloatMagneticFluxVector", this.toString());
1043         FloatMagneticFluxVector result = new FloatMagneticFluxVector(this.data, displayUnit.getStandardUnit());
1044         result.setDisplayUnit(displayUnit);
1045         return result;
1046     }
1047 
1048     /**
1049      * Return the current vector as a mass vector.
1050      * @return FloatMassVector; the current vector as a mass vector
1051      */
1052     public final FloatMassVector asMass()
1053     {
1054         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MassUnit.BASE.getSiDimensions())),
1055                 UnitRuntimeException.class, "cannot cast %s to FloatMassVector", this.toString());
1056         return new FloatMassVector(this.data, MassUnit.SI);
1057     }
1058 
1059     /**
1060      * Return the current vector as a mass vector, and provide a display unit.
1061      * @param displayUnit the unit in which the value will be displayed
1062      * @return FloatMassVector; the current vector as a mass vector
1063      */
1064     public final FloatMassVector asMass(final MassUnit displayUnit)
1065     {
1066         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MassUnit.BASE.getSiDimensions())),
1067                 UnitRuntimeException.class, "cannot cast %s to FloatMassVector", this.toString());
1068         FloatMassVector result = new FloatMassVector(this.data, displayUnit.getStandardUnit());
1069         result.setDisplayUnit(displayUnit);
1070         return result;
1071     }
1072 
1073     /**
1074      * Return the current vector as a momentum vector.
1075      * @return FloatMomentumVector; the current vector as a momentum vector
1076      */
1077     public final FloatMomentumVector asMomentum()
1078     {
1079         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MomentumUnit.BASE.getSiDimensions())),
1080                 UnitRuntimeException.class, "cannot cast %s to FloatMomentumVector", this.toString());
1081         return new FloatMomentumVector(this.data, MomentumUnit.SI);
1082     }
1083 
1084     /**
1085      * Return the current vector as a momentum vector, and provide a display unit.
1086      * @param displayUnit the unit in which the value will be displayed
1087      * @return FloatMomentumVector; the current vector as a momentum vector
1088      */
1089     public final FloatMomentumVector asMomentum(final MomentumUnit displayUnit)
1090     {
1091         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(MomentumUnit.BASE.getSiDimensions())),
1092                 UnitRuntimeException.class, "cannot cast %s to FloatMomentumVector", this.toString());
1093         FloatMomentumVector result = new FloatMomentumVector(this.data, displayUnit.getStandardUnit());
1094         result.setDisplayUnit(displayUnit);
1095         return result;
1096     }
1097 
1098     /**
1099      * Return the current vector as a power vector.
1100      * @return FloatPowerVector; the current vector as a power vector
1101      */
1102     public final FloatPowerVector asPower()
1103     {
1104         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PowerUnit.BASE.getSiDimensions())),
1105                 UnitRuntimeException.class, "cannot cast %s to FloatPowerVector", this.toString());
1106         return new FloatPowerVector(this.data, PowerUnit.SI);
1107     }
1108 
1109     /**
1110      * Return the current vector as a power vector, and provide a display unit.
1111      * @param displayUnit the unit in which the value will be displayed
1112      * @return FloatPowerVector; the current vector as a power vector
1113      */
1114     public final FloatPowerVector asPower(final PowerUnit displayUnit)
1115     {
1116         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PowerUnit.BASE.getSiDimensions())),
1117                 UnitRuntimeException.class, "cannot cast %s to FloatPowerVector", this.toString());
1118         FloatPowerVector result = new FloatPowerVector(this.data, displayUnit.getStandardUnit());
1119         result.setDisplayUnit(displayUnit);
1120         return result;
1121     }
1122 
1123     /**
1124      * Return the current vector as a pressure vector.
1125      * @return FloatPressureVector; the current vector as a pressure vector
1126      */
1127     public final FloatPressureVector asPressure()
1128     {
1129         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PressureUnit.BASE.getSiDimensions())),
1130                 UnitRuntimeException.class, "cannot cast %s to FloatPressureVector", this.toString());
1131         return new FloatPressureVector(this.data, PressureUnit.SI);
1132     }
1133 
1134     /**
1135      * Return the current vector as a pressure vector, and provide a display unit.
1136      * @param displayUnit the unit in which the value will be displayed
1137      * @return FloatPressureVector; the current vector as a pressure vector
1138      */
1139     public final FloatPressureVector asPressure(final PressureUnit displayUnit)
1140     {
1141         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(PressureUnit.BASE.getSiDimensions())),
1142                 UnitRuntimeException.class, "cannot cast %s to FloatPressureVector", this.toString());
1143         FloatPressureVector result = new FloatPressureVector(this.data, displayUnit.getStandardUnit());
1144         result.setDisplayUnit(displayUnit);
1145         return result;
1146     }
1147 
1148     /**
1149      * Return the current vector as a radioactivity vector.
1150      * @return FloatRadioActivityVector; the current vector as a radioactivity vector
1151      */
1152     public final FloatRadioActivityVector asRadioActivity()
1153     {
1154         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(RadioActivityUnit.BASE.getSiDimensions())),
1155                 UnitRuntimeException.class, "cannot cast %s to FloatRadioActivityVector", this.toString());
1156         return new FloatRadioActivityVector(this.data, RadioActivityUnit.SI);
1157     }
1158 
1159     /**
1160      * Return the current vector as a radioactivity vector, and provide a display unit.
1161      * @param displayUnit the unit in which the value will be displayed
1162      * @return FloatRadioActivityVector; the current vector as a radioactivity vector
1163      */
1164     public final FloatRadioActivityVector asRadioActivity(final RadioActivityUnit displayUnit)
1165     {
1166         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(RadioActivityUnit.BASE.getSiDimensions())),
1167                 UnitRuntimeException.class, "cannot cast %s to FloatRadioActivityVector", this.toString());
1168         FloatRadioActivityVector result = new FloatRadioActivityVector(this.data, displayUnit.getStandardUnit());
1169         result.setDisplayUnit(displayUnit);
1170         return result;
1171     }
1172 
1173     /**
1174      * Return the current vector as a solidangle vector.
1175      * @return FloatSolidAngleVector; the current vector as a solidangle vector
1176      */
1177     public final FloatSolidAngleVector asSolidAngle()
1178     {
1179         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SolidAngleUnit.BASE.getSiDimensions())),
1180                 UnitRuntimeException.class, "cannot cast %s to FloatSolidAngleVector", this.toString());
1181         return new FloatSolidAngleVector(this.data, SolidAngleUnit.SI);
1182     }
1183 
1184     /**
1185      * Return the current vector as a solidangle vector, and provide a display unit.
1186      * @param displayUnit the unit in which the value will be displayed
1187      * @return FloatSolidAngleVector; the current vector as a solidangle vector
1188      */
1189     public final FloatSolidAngleVector asSolidAngle(final SolidAngleUnit displayUnit)
1190     {
1191         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SolidAngleUnit.BASE.getSiDimensions())),
1192                 UnitRuntimeException.class, "cannot cast %s to FloatSolidAngleVector", this.toString());
1193         FloatSolidAngleVector result = new FloatSolidAngleVector(this.data, displayUnit.getStandardUnit());
1194         result.setDisplayUnit(displayUnit);
1195         return result;
1196     }
1197 
1198     /**
1199      * Return the current vector as a speed vector.
1200      * @return FloatSpeedVector; the current vector as a speed vector
1201      */
1202     public final FloatSpeedVector asSpeed()
1203     {
1204         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SpeedUnit.BASE.getSiDimensions())),
1205                 UnitRuntimeException.class, "cannot cast %s to FloatSpeedVector", this.toString());
1206         return new FloatSpeedVector(this.data, SpeedUnit.SI);
1207     }
1208 
1209     /**
1210      * Return the current vector as a speed vector, and provide a display unit.
1211      * @param displayUnit the unit in which the value will be displayed
1212      * @return FloatSpeedVector; the current vector as a speed vector
1213      */
1214     public final FloatSpeedVector asSpeed(final SpeedUnit displayUnit)
1215     {
1216         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(SpeedUnit.BASE.getSiDimensions())),
1217                 UnitRuntimeException.class, "cannot cast %s to FloatSpeedVector", this.toString());
1218         FloatSpeedVector result = new FloatSpeedVector(this.data, displayUnit.getStandardUnit());
1219         result.setDisplayUnit(displayUnit);
1220         return result;
1221     }
1222 
1223     /**
1224      * Return the current vector as a torque vector.
1225      * @return FloatTorqueVector; the current vector as a torque vector
1226      */
1227     public final FloatTorqueVector asTorque()
1228     {
1229         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TorqueUnit.BASE.getSiDimensions())),
1230                 UnitRuntimeException.class, "cannot cast %s to FloatTorqueVector", this.toString());
1231         return new FloatTorqueVector(this.data, TorqueUnit.SI);
1232     }
1233 
1234     /**
1235      * Return the current vector as a torque vector, and provide a display unit.
1236      * @param displayUnit the unit in which the value will be displayed
1237      * @return FloatTorqueVector; the current vector as a torque vector
1238      */
1239     public final FloatTorqueVector asTorque(final TorqueUnit displayUnit)
1240     {
1241         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TorqueUnit.BASE.getSiDimensions())),
1242                 UnitRuntimeException.class, "cannot cast %s to FloatTorqueVector", this.toString());
1243         FloatTorqueVector result = new FloatTorqueVector(this.data, displayUnit.getStandardUnit());
1244         result.setDisplayUnit(displayUnit);
1245         return result;
1246     }
1247 
1248     /**
1249      * Return the current vector as a volume vector.
1250      * @return FloatVolumeVector; the current vector as a volume vector
1251      */
1252     public final FloatVolumeVector asVolume()
1253     {
1254         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(VolumeUnit.BASE.getSiDimensions())),
1255                 UnitRuntimeException.class, "cannot cast %s to FloatVolumeVector", this.toString());
1256         return new FloatVolumeVector(this.data, VolumeUnit.SI);
1257     }
1258 
1259     /**
1260      * Return the current vector as a volume vector, and provide a display unit.
1261      * @param displayUnit the unit in which the value will be displayed
1262      * @return FloatVolumeVector; the current vector as a volume vector
1263      */
1264     public final FloatVolumeVector asVolume(final VolumeUnit displayUnit)
1265     {
1266         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(VolumeUnit.BASE.getSiDimensions())),
1267                 UnitRuntimeException.class, "cannot cast %s to FloatVolumeVector", this.toString());
1268         FloatVolumeVector result = new FloatVolumeVector(this.data, displayUnit.getStandardUnit());
1269         result.setDisplayUnit(displayUnit);
1270         return result;
1271     }
1272 
1273     /**
1274      * Return the current vector as a angle vector.
1275      * @return FloatAngleVector; the current vector as a angle vector
1276      */
1277     public final FloatAngleVector asAngle()
1278     {
1279         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngleUnit.BASE.getSiDimensions())),
1280                 UnitRuntimeException.class, "cannot cast %s to FloatAngleVector", this.toString());
1281         return new FloatAngleVector(this.data, AngleUnit.SI);
1282     }
1283 
1284     /**
1285      * Return the current vector as a angle vector, and provide a display unit.
1286      * @param displayUnit the unit in which the value will be displayed
1287      * @return FloatAngleVector; the current vector as a angle vector
1288      */
1289     public final FloatAngleVector asAngle(final AngleUnit displayUnit)
1290     {
1291         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(AngleUnit.BASE.getSiDimensions())),
1292                 UnitRuntimeException.class, "cannot cast %s to FloatAngleVector", this.toString());
1293         FloatAngleVector result = new FloatAngleVector(this.data, displayUnit.getStandardUnit());
1294         result.setDisplayUnit(displayUnit);
1295         return result;
1296     }
1297 
1298     /**
1299      * Return the current vector as a length vector.
1300      * @return FloatLengthVector; the current vector as a length vector
1301      */
1302     public final FloatLengthVector asLength()
1303     {
1304         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LengthUnit.BASE.getSiDimensions())),
1305                 UnitRuntimeException.class, "cannot cast %s to FloatLengthVector", this.toString());
1306         return new FloatLengthVector(this.data, LengthUnit.SI);
1307     }
1308 
1309     /**
1310      * Return the current vector as a length vector, and provide a display unit.
1311      * @param displayUnit the unit in which the value will be displayed
1312      * @return FloatLengthVector; the current vector as a length vector
1313      */
1314     public final FloatLengthVector asLength(final LengthUnit displayUnit)
1315     {
1316         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(LengthUnit.BASE.getSiDimensions())),
1317                 UnitRuntimeException.class, "cannot cast %s to FloatLengthVector", this.toString());
1318         FloatLengthVector result = new FloatLengthVector(this.data, displayUnit.getStandardUnit());
1319         result.setDisplayUnit(displayUnit);
1320         return result;
1321     }
1322 
1323     /**
1324      * Return the current vector as a temperature vector.
1325      * @return FloatTemperatureVector; the current vector as a temperature vector
1326      */
1327     public final FloatTemperatureVector asTemperature()
1328     {
1329         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TemperatureUnit.BASE.getSiDimensions())),
1330                 UnitRuntimeException.class, "cannot cast %s to FloatTemperatureVector", this.toString());
1331         return new FloatTemperatureVector(this.data, TemperatureUnit.SI);
1332     }
1333 
1334     /**
1335      * Return the current vector as a temperature vector, and provide a display unit.
1336      * @param displayUnit the unit in which the value will be displayed
1337      * @return FloatTemperatureVector; the current vector as a temperature vector
1338      */
1339     public final FloatTemperatureVector asTemperature(final TemperatureUnit displayUnit)
1340     {
1341         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(TemperatureUnit.BASE.getSiDimensions())),
1342                 UnitRuntimeException.class, "cannot cast %s to FloatTemperatureVector", this.toString());
1343         FloatTemperatureVector result = new FloatTemperatureVector(this.data, displayUnit.getStandardUnit());
1344         result.setDisplayUnit(displayUnit);
1345         return result;
1346     }
1347 
1348     /**
1349      * Return the current vector as a duration vector.
1350      * @return FloatDurationVector; the current vector as a duration vector
1351      */
1352     public final FloatDurationVector asDuration()
1353     {
1354         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DurationUnit.BASE.getSiDimensions())),
1355                 UnitRuntimeException.class, "cannot cast %s to FloatDurationVector", this.toString());
1356         return new FloatDurationVector(this.data, DurationUnit.SI);
1357     }
1358 
1359     /**
1360      * Return the current vector as a duration vector, and provide a display unit.
1361      * @param displayUnit the unit in which the value will be displayed
1362      * @return FloatDurationVector; the current vector as a duration vector
1363      */
1364     public final FloatDurationVector asDuration(final DurationUnit displayUnit)
1365     {
1366         Throw.when(!(getDisplayUnit().getQuantity().getSiDimensions().equals(DurationUnit.BASE.getSiDimensions())),
1367                 UnitRuntimeException.class, "cannot cast %s to FloatDurationVector", this.toString());
1368         FloatDurationVector result = new FloatDurationVector(this.data, displayUnit.getStandardUnit());
1369         result.setDisplayUnit(displayUnit);
1370         return result;
1371     }
1372 
1373 }