TypedDoubleScalarDimensionless.java

package org.djunits.value.vdouble.scalar;

import org.djunits.unit.Unit;
import org.djunits.value.MathFunctionsDimensionless;

/**
 * Absolute Relative typed scalar. <br>
 * Note: Each scalar class should implement the static interpolate(zero, one, ratio). <br>
 * Note: A scalar class can implement the toAbs() method if it has an absolute equivalent.
 * <p>
 * Copyright (c) 2013-2016 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved. <br>
 * BSD-style license. See <a href="http://djunits.org/docs/license.html">DJUNITS License</a>.
 * <p>
 * $LastChangedDate: 2015-10-04 20:45:14 +0200 (Sun, 04 Oct 2015) $, @version $Revision: 85 $, by $Author: averbraeck $, initial
 * version Sep 5, 2015 <br>
 * @author <a href="http://www.tbm.tudelft.nl/averbraeck">Alexander Verbraeck</a>
 * @author <a href="http://www.tudelft.nl/pknoppers">Peter Knoppers</a>
 * @param <U> the unit
 * @param <R> the relative vector type
 */
public abstract class TypedDoubleScalarDimensionless<U extends Unit<U>, R extends TypedDoubleScalarDimensionless<U, R>> extends
        TypedDoubleScalarRel<U, R> implements MathFunctionsDimensionless<R>
{
    /** */
    private static final long serialVersionUID = 20150905L;

    /**
     * Construct Rel scalar.
     * @param value double value
     * @param unit unit for the double value
     */
    public TypedDoubleScalarDimensionless(final double value, final U unit)
    {
        super(value, unit);
    }

    /**
     * Construct Rel scalar.
     * @param value Scalar from which to construct this instance
     */
    public TypedDoubleScalarDimensionless(final R value)
    {
        super(value);
    }

    /** {@inheritDoc} */
    @Override
    public final R acos()
    {
        return instantiateTypeRel(Math.acos(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R asin()
    {
        return instantiateTypeRel(Math.asin(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R atan()
    {
        return instantiateTypeRel(Math.atan(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R cbrt()
    {
        return instantiateTypeRel(Math.cbrt(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R cos()
    {
        return instantiateTypeRel(Math.cos(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R cosh()
    {
        return instantiateTypeRel(Math.cosh(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R exp()
    {
        return instantiateTypeRel(Math.exp(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R expm1()
    {
        return instantiateTypeRel(Math.expm1(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R log()
    {
        return instantiateTypeRel(Math.log(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R log10()
    {
        return instantiateTypeRel(Math.log10(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R log1p()
    {
        return instantiateTypeRel(Math.log1p(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R signum()
    {
        return instantiateTypeRel(Math.signum(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R sin()
    {
        return instantiateTypeRel(Math.sin(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R sinh()
    {
        return instantiateTypeRel(Math.sinh(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R sqrt()
    {
        return instantiateTypeRel(Math.sqrt(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R tan()
    {
        return instantiateTypeRel(Math.tan(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R tanh()
    {
        return instantiateTypeRel(Math.tanh(getInUnit()), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R inv()
    {
        return instantiateTypeRel(1.0 / getInUnit(), getUnit());
    }

    /** {@inheritDoc} */
    @Override
    public final R pow(final double x)
    {
        return instantiateTypeRel(Math.pow(getInUnit(), x), getUnit());
    }
}