2 * This file is part of storage-units. It is subject to the license terms in the LICENSE file found in the top-level
3 * directory of this distribution and at http://creativecommons.org/publicdomain/zero/1.0/. No part of storage-units,
4 * including this file, may be copied, modified, propagated, or distributed except according to the terms contained
7 package de
.xn__ho_hia
.utils
.storage_unit
;
9 import static de
.xn__ho_hia
.quality
.null_analysis
.Nullsafe
.addNullsafe
;
10 import static de
.xn__ho_hia
.quality
.null_analysis
.Nullsafe
.asBigInteger
;
11 import static de
.xn__ho_hia
.quality
.null_analysis
.Nullsafe
.divideNullsafe
;
12 import static de
.xn__ho_hia
.quality
.null_analysis
.Nullsafe
.multiplyNullsafe
;
13 import static de
.xn__ho_hia
.quality
.null_analysis
.Nullsafe
.subtractNullsafe
;
15 import java
.math
.BigInteger
;
16 import java
.util
.function
.Function
;
18 import org
.eclipse
.jdt
.annotation
.NonNull
;
21 * Gigabyte as specified in ISO IEC 80000-13:2008 (1 Gigabyte = 1 000 000 000 Byte).
23 public class Gigabyte
extends StorageUnit
<Gigabyte
> {
25 private static final long serialVersionUID
= 7581075190529125530L;
27 Gigabyte(@NonNull final BigInteger bytes
) {
32 * @param numberOfBytes
33 * The amount of bytes the Gigabyte contains.
34 * @return A new Gigabyte unit with the given value.
37 public static Gigabyte
valueOf(@NonNull final BigInteger numberOfBytes
) {
38 return new Gigabyte(numberOfBytes
);
42 * @param numberOfBytes
43 * The amount of bytes the Gigabyte contains.
44 * @return A new Gigabyte unit with the given value.
47 public static Gigabyte
valueOf(final long numberOfBytes
) {
48 return new Gigabyte(asBigInteger(numberOfBytes
));
52 * @param numberOfBytes
53 * The amount of bytes the Gigabyte contains.
54 * @return A new Gigabyte unit with the given value.
57 public static Gigabyte
valueOf(@NonNull final Long numberOfBytes
) {
58 return valueOf(numberOfBytes
.longValue());
62 public Gigabyte
add(final long bytesToAdd
) {
63 return new Gigabyte(addNullsafe(bytes
, asBigInteger(bytesToAdd
)));
67 public Gigabyte
add(final StorageUnit
<?
> storageAmount
) {
68 return new Gigabyte(addNullsafe(bytes
, storageAmount
.bytes
));
72 public Gigabyte
divide(final long divisor
) {
73 return new Gigabyte(divideNullsafe(bytes
, asBigInteger(divisor
)));
77 public Gigabyte
multiply(final long factor
) {
78 return new Gigabyte(multiplyNullsafe(bytes
, asBigInteger(factor
)));
82 public Gigabyte
subtract(final long bytesToSubtract
) {
83 return new Gigabyte(subtractNullsafe(bytes
, asBigInteger(bytesToSubtract
)));
87 public Gigabyte
subtract(final StorageUnit
<?
> storageAmount
) {
88 return new Gigabyte(subtractNullsafe(bytes
, storageAmount
.bytes
));
92 protected BigInteger
getNumberOfBytesPerUnit() {
93 return StorageUnit
.BYTES_IN_A_GIGABYTE
;
97 protected String
getSymbol() {
98 return "GB"; //$NON-NLS-1$
102 protected Function
<@NonNull BigInteger
, @NonNull StorageUnit
<?
>> converter() {
103 return StorageUnits
::metricValueOf
;