ContinuousDistFloatScalar.java

  1. package org.opentrafficsim.core.units.distributions;

  2. import java.io.Serializable;

  3. import org.djunits.unit.AccelerationUnit;
  4. import org.djunits.unit.AngleSolidUnit;
  5. import org.djunits.unit.AngleUnit;
  6. import org.djunits.unit.AreaUnit;
  7. import org.djunits.unit.DensityUnit;
  8. import org.djunits.unit.DimensionlessUnit;
  9. import org.djunits.unit.ElectricalChargeUnit;
  10. import org.djunits.unit.ElectricalCurrentUnit;
  11. import org.djunits.unit.ElectricalPotentialUnit;
  12. import org.djunits.unit.ElectricalResistanceUnit;
  13. import org.djunits.unit.EnergyUnit;
  14. import org.djunits.unit.FlowMassUnit;
  15. import org.djunits.unit.FlowVolumeUnit;
  16. import org.djunits.unit.ForceUnit;
  17. import org.djunits.unit.FrequencyUnit;
  18. import org.djunits.unit.LengthUnit;
  19. import org.djunits.unit.LinearDensityUnit;
  20. import org.djunits.unit.MassUnit;
  21. import org.djunits.unit.PowerUnit;
  22. import org.djunits.unit.PressureUnit;
  23. import org.djunits.unit.SpeedUnit;
  24. import org.djunits.unit.TemperatureUnit;
  25. import org.djunits.unit.TimeUnit;
  26. import org.djunits.unit.TorqueUnit;
  27. import org.djunits.unit.Unit;
  28. import org.djunits.unit.VolumeUnit;
  29. import org.djunits.value.Absolute;
  30. import org.djunits.value.Relative;
  31. import org.djunits.value.vfloat.scalar.AbstractFloatScalarAbs;
  32. import org.djunits.value.vfloat.scalar.AbstractFloatScalarRel;
  33. import org.djunits.value.vfloat.scalar.FloatAbsoluteTemperature;
  34. import org.djunits.value.vfloat.scalar.FloatAcceleration;
  35. import org.djunits.value.vfloat.scalar.FloatAngle;
  36. import org.djunits.value.vfloat.scalar.FloatAngleSolid;
  37. import org.djunits.value.vfloat.scalar.FloatArea;
  38. import org.djunits.value.vfloat.scalar.FloatDensity;
  39. import org.djunits.value.vfloat.scalar.FloatDimensionless;
  40. import org.djunits.value.vfloat.scalar.FloatDirection;
  41. import org.djunits.value.vfloat.scalar.FloatDuration;
  42. import org.djunits.value.vfloat.scalar.FloatElectricalCharge;
  43. import org.djunits.value.vfloat.scalar.FloatElectricalCurrent;
  44. import org.djunits.value.vfloat.scalar.FloatElectricalPotential;
  45. import org.djunits.value.vfloat.scalar.FloatElectricalResistance;
  46. import org.djunits.value.vfloat.scalar.FloatEnergy;
  47. import org.djunits.value.vfloat.scalar.FloatFlowMass;
  48. import org.djunits.value.vfloat.scalar.FloatFlowVolume;
  49. import org.djunits.value.vfloat.scalar.FloatForce;
  50. import org.djunits.value.vfloat.scalar.FloatFrequency;
  51. import org.djunits.value.vfloat.scalar.FloatLength;
  52. import org.djunits.value.vfloat.scalar.FloatLinearDensity;
  53. import org.djunits.value.vfloat.scalar.FloatMass;
  54. import org.djunits.value.vfloat.scalar.FloatPosition;
  55. import org.djunits.value.vfloat.scalar.FloatPower;
  56. import org.djunits.value.vfloat.scalar.FloatPressure;
  57. import org.djunits.value.vfloat.scalar.FloatScalar;
  58. import org.djunits.value.vfloat.scalar.FloatSpeed;
  59. import org.djunits.value.vfloat.scalar.FloatTemperature;
  60. import org.djunits.value.vfloat.scalar.FloatTime;
  61. import org.djunits.value.vfloat.scalar.FloatTorque;
  62. import org.djunits.value.vfloat.scalar.FloatVolume;

  63. import nl.tudelft.simulation.jstats.distributions.DistContinuous;

  64. /**
  65.  * <p>
  66.  * Copyright (c) 2013-2016 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
  67.  * BSD-style license. See <a href="http://opentrafficsim.org/docs/license.html">OpenTrafficSim License</a>.
  68.  * <p>
  69.  * $LastChangedDate: 2015-07-26 01:01:13 +0200 (Sun, 26 Jul 2015) $, @version $Revision: 1155 $, by $Author: averbraeck $,
  70.  * initial version Feb 2, 2015 <br>
  71.  * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
  72.  */
  73. public interface ContinuousDistFloatScalar
  74. {
  75.     /**
  76.      * Absolute value.
  77.      * @param <T> The absolute FloatScalar type
  78.      * @param <U> The unit type used
  79.      */
  80.     class Abs<T extends AbstractFloatScalarAbs<U, T, ?>, U extends Unit<U>> extends AbstractContinuousDistScalar
  81.             implements Absolute, Serializable
  82.     {
  83.         /** */
  84.         private static final long serialVersionUID = 20150000;

  85.         /**
  86.          * @param distribution the wrapped distribution function.
  87.          * @param unit the unit.
  88.          */
  89.         public Abs(final DistContinuous distribution, final U unit)
  90.         {
  91.             super(distribution, unit);
  92.         }

  93.         /**
  94.          * @param constant the constant value.
  95.          * @param unit the unit.
  96.          */
  97.         public Abs(final float constant, final U unit)
  98.         {
  99.             super(constant, unit);
  100.         }

  101.         /**
  102.          * @return a drawn number from the distribution in the given unit.
  103.          */
  104.         @SuppressWarnings({ "unchecked", "rawtypes" })
  105.         public final T draw()
  106.         {
  107.             switch (getUnit().getClass().getSimpleName())
  108.             {
  109.                 case "AngleUnit":
  110.                     return (T) new FloatDirection((float) getDistribution().draw(), (AngleUnit) getUnit());

  111.                 case "LengthUnit":
  112.                     return (T) new FloatPosition((float) getDistribution().draw(), (LengthUnit) getUnit());

  113.                 case "TemperatureUnit":
  114.                     return (T) new FloatAbsoluteTemperature((float) getDistribution().draw(), (TemperatureUnit) getUnit());

  115.                 case "TimeUnit":
  116.                     return (T) new FloatTime((float) getDistribution().draw(), (TimeUnit) getUnit());

  117.                 default:
  118.                     return (T) new FloatScalar.Abs((float) getDistribution().draw(), getUnit());
  119.             }
  120.         }

  121.         /** {@inheritDoc} */
  122.         @Override
  123.         public final String toString()
  124.         {
  125.             return "ContinuousDistFloatScalar.Abs [T=" + getUnit().getClass().getSimpleName() + "]";
  126.         }

  127.     }

  128.     /**
  129.      * Relative value.
  130.      * @param <T> The absolute FloatScalar type
  131.      * @param <U> The unit type used
  132.      */
  133.     class Rel<T extends AbstractFloatScalarRel<U, T>, U extends Unit<U>> extends AbstractContinuousDistScalar
  134.             implements Relative, Serializable
  135.     {
  136.         /** */
  137.         private static final long serialVersionUID = 20150000L;

  138.         /**
  139.          * @param distribution the wrapped distribution function.
  140.          * @param unit the unit.
  141.          */
  142.         public Rel(final DistContinuous distribution, final U unit)
  143.         {
  144.             super(distribution, unit);
  145.         }

  146.         /**
  147.          * @param constant the constant value.
  148.          * @param unit the unit.
  149.          */
  150.         public Rel(final float constant, final U unit)
  151.         {
  152.             super(constant, unit);
  153.         }

  154.         /**
  155.          * @return a drawn number from the distribution in the given unit.
  156.          */
  157.         @SuppressWarnings({ "unchecked", "rawtypes" })
  158.         public final T draw()
  159.         {
  160.             switch (getUnit().getClass().getSimpleName())
  161.             {
  162.                 case "AccelerationUnit":
  163.                     return (T) new FloatAcceleration((float) getDistribution().draw(), (AccelerationUnit) getUnit());

  164.                 case "AngleUnit":
  165.                     return (T) new FloatAngle((float) getDistribution().draw(), (AngleUnit) getUnit());

  166.                 case "AngleSolidUnit":
  167.                     return (T) new FloatAngleSolid((float) getDistribution().draw(), (AngleSolidUnit) getUnit());

  168.                 case "AreaUnit":
  169.                     return (T) new FloatArea((float) getDistribution().draw(), (AreaUnit) getUnit());

  170.                 case "DensityUnit":
  171.                     return (T) new FloatDensity((float) getDistribution().draw(), (DensityUnit) getUnit());

  172.                 case "DimensionlessUnit":
  173.                     return (T) new FloatDimensionless((float) getDistribution().draw(), (DimensionlessUnit) getUnit());

  174.                 case "ElectricalChargeUnit":
  175.                     return (T) new FloatElectricalCharge((float) getDistribution().draw(), (ElectricalChargeUnit) getUnit());

  176.                 case "ElectricalCurrentUnit":
  177.                     return (T) new FloatElectricalCurrent((float) getDistribution().draw(), (ElectricalCurrentUnit) getUnit());

  178.                 case "ElectricalPotentialUnit":
  179.                     return (T) new FloatElectricalPotential((float) getDistribution().draw(),
  180.                             (ElectricalPotentialUnit) getUnit());

  181.                 case "ElectricalResistanceUnit":
  182.                     return (T) new FloatElectricalResistance((float) getDistribution().draw(),
  183.                             (ElectricalResistanceUnit) getUnit());

  184.                 case "EnergyUnit":
  185.                     return (T) new FloatEnergy((float) getDistribution().draw(), (EnergyUnit) getUnit());

  186.                 case "FlowMassUnit":
  187.                     return (T) new FloatFlowMass((float) getDistribution().draw(), (FlowMassUnit) getUnit());

  188.                 case "FlowVolumeUnit":
  189.                     return (T) new FloatFlowVolume((float) getDistribution().draw(), (FlowVolumeUnit) getUnit());

  190.                 case "ForceUnit":
  191.                     return (T) new FloatForce((float) getDistribution().draw(), (ForceUnit) getUnit());

  192.                 case "FrequencyUnit":
  193.                     return (T) new FloatFrequency((float) getDistribution().draw(), (FrequencyUnit) getUnit());

  194.                 case "LengthUnit":
  195.                     return (T) new FloatLength((float) getDistribution().draw(), (LengthUnit) getUnit());

  196.                 case "LinearDensityUnit":
  197.                     return (T) new FloatLinearDensity((float) getDistribution().draw(), (LinearDensityUnit) getUnit());

  198.                 case "MassUnit":
  199.                     return (T) new FloatMass((float) getDistribution().draw(), (MassUnit) getUnit());

  200.                 case "PowerUnit":
  201.                     return (T) new FloatPower((float) getDistribution().draw(), (PowerUnit) getUnit());

  202.                 case "PressureUnit":
  203.                     return (T) new FloatPressure((float) getDistribution().draw(), (PressureUnit) getUnit());

  204.                 case "SpeedUnit":
  205.                     return (T) new FloatSpeed((float) getDistribution().draw(), (SpeedUnit) getUnit());

  206.                 case "TemperatureUnit":
  207.                     return (T) new FloatTemperature((float) getDistribution().draw(), (TemperatureUnit) getUnit());

  208.                 case "TimeUnit":
  209.                     return (T) new FloatDuration((float) getDistribution().draw(), (TimeUnit) getUnit());

  210.                 case "TorqueUnit":
  211.                     return (T) new FloatTorque((float) getDistribution().draw(), (TorqueUnit) getUnit());

  212.                 case "VolumeUnit":
  213.                     return (T) new FloatVolume((float) getDistribution().draw(), (VolumeUnit) getUnit());

  214.                 default:
  215.                     return (T) new FloatScalar.Rel((float) getDistribution().draw(), getUnit());
  216.             }
  217.         }

  218.         /** {@inheritDoc} */
  219.         @Override
  220.         public final String toString()
  221.         {
  222.             return "ContinuousDistFloatScalar.Rel [T=" + getUnit().getClass().getSimpleName() + "]";
  223.         }

  224.     }

  225. }