blob: 80d077b969d1f832633417baa0275d2c86c2b9e8 [file] [log] [blame]
/**
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.aurora.common.quantity;
/**
* Provides a unit to allow conversions and unambiguous passing around of data {@link Amount}s.
* The kilo/mega/giga/... hierarchy is built on base 2 so that the hierarchy increases by a factor
* of 1024 instead of 1000 as typical in metric units. Additionally, units are divided in 2
* hierarchies one based on bits and the other on bytes. Thus {@link #Kb} represents kilobits; so
* 1 Kb = 1024 bits, and {@link #KB} represents kilobytes so 1 KB = 1024 bytes or 8192 bits.
*
* @author John Sirois
*/
public enum Data implements Unit<Data> {
BITS(1),
Kb(1024, BITS),
Mb(1024, Kb),
Gb(1024, Mb),
BYTES(8, BITS),
KB(1024, BYTES),
MB(1024, KB),
GB(1024, MB),
TB(1024, GB),
PB(1024, TB);
private final double multiplier;
private Data(double multiplier) {
this.multiplier = multiplier;
}
private Data(double multiplier, Data base) {
this(multiplier * base.multiplier);
}
@Override
public double multiplier() {
return multiplier;
}
}