content: /**
   * 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;
    }
  }
  