javax.measure.BinaryPrefix Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of unit-api Show documentation
Show all versions of unit-api Show documentation
Units of Measurement Standard - This JSR specifies Java packages for modeling and working with measurement values, quantities and their corresponding units.
The newest version!
/*
* Units of Measurement API
* Copyright (c) 2014-2023, Jean-Marie Dautelle, Werner Keil, Otavio Santana.
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions
* and the following disclaimer in the documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of JSR-385 nor the names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package javax.measure;
/**
* Provides support for common binary prefixes to be used by units. For example:
*
* {@code import static systems.uom.unicode.CLDR.*; // Static import (from Unicode System).
* import static javax.measure.BinaryPrefix.*; // Static import.
* import javax.measure.*;
* import systems.uom.quantity.Information; // (from Systems Quantities)
* ...
* Unit MEBIT = MEBI(BIT);
* Unit GIBYTE = GIBI(BYTE);}
*
* You could also apply Unit.prefix
:
*
* {@code ...
* Unit MEBIT = BIT.prefix(MEBI);
* Unit GIBYTE = BYTE.prefix(GIBI);}
*
*
*
* Do not use ordinal() to obtain the numeric representation of BinaryPrefix. Use getValue() and getExponent() instead.
*
*
*
* - Implementation Requirements
- This is an immutable and thread-safe enum.
*
*
* @author Werner Keil
* @version 2.2, May 20, 2023
* @see Wikipedia: Binary Prefix
* @since 2.0
*/
public enum BinaryPrefix implements Prefix {
/** Prefix for 1024. */
KIBI("Ki", 1),
/** Prefix for 10242. */
MEBI("Mi", 2),
/** Prefix for 10243. */
GIBI("Gi", 3),
/** Prefix for 10244. */
TEBI("Ti", 4),
/** Prefix for 10245. */
PEBI("Pi", 5),
/** Prefix for 10246. */
EXBI("Ei", 6),
/** Prefix for 10247. */
ZEBI("Zi", 7),
/** Prefix for 10248. */
YOBI("Yi", 8);
/**
* The symbol of this prefix, as returned by {@link #getSymbol}.
*
* @serial
* @see #getSymbol()
*/
private final String symbol;
/**
* Exponent part of the associated factor in base^exponent representation.
*/
private final int exponent;
/**
* Creates a new prefix.
*
* @param symbol
* the symbol of this prefix.
* @param exponent
* part of the associated factor in base^exponent representation.
*/
private BinaryPrefix(String symbol, int exponent) {
this.symbol = symbol;
this.exponent = exponent;
}
/**
* Returns the specified unit multiplied by the factor 1024
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1024)
.
*/
public static > Unit KIBI(Unit unit) {
return unit.prefix(KIBI);
}
/**
* Returns the specified unit multiplied by the factor 10242
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1048576)
.
*/
public static > Unit MEBI(Unit unit) {
return unit.prefix(MEBI);
}
/**
* Returns the specified unit multiplied by the factor 10243
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1073741824)
.
*/
public static > Unit GIBI(Unit unit) {
return unit.prefix(GIBI);
}
/**
* Returns the specified unit multiplied by the factor 10244
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1099511627776L)
.
*/
public static > Unit TEBI(Unit unit) {
return unit.prefix(TEBI);
}
/**
* Returns the specified unit multiplied by the factor 10245
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1125899906842624L)
.
*/
public static > Unit PEBI(Unit unit) {
return unit.prefix(PEBI);
}
/**
* Returns the specified unit multiplied by the factor 10246
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1152921504606846976L)
.
*/
public static > Unit EXBI(Unit unit) {
return unit.prefix(EXBI);
}
/**
* Returns the specified unit multiplied by the factor 10247
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1152921504606846976d)
.
*/
public static > Unit ZEBI(Unit unit) {
return unit.prefix(ZEBI);
}
/**
* Returns the specified unit multiplied by the factor 10248
(binary prefix).
*
* @param
* type of the quantity measured by the unit.
* @param unit
* any unit.
* @return unit.multiply(1208925819614629174706176d)
.
*/
public static > Unit YOBI(Unit unit) {
return unit.prefix(YOBI);
}
/**
* Returns the symbol of this prefix.
*
* @return this prefix symbol, not {@code null}.
*/
@Override
public String getSymbol() {
return symbol;
}
/**
* Base part of the associated factor in {@code base^exponent} representation. For binary prefix, this is always 1024.
*/
@Override
public Integer getValue() {
return 1024;
}
/**
* Exponent part of the associated factor in {@code base^exponent} representation.
*/
@Override
public int getExponent() {
return exponent;
}
/**
* Returns the name of this prefix.
*
* @return this prefix name, not {@code null}.
*/
@Override
public String getName() {
return name();
}
}