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
.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 * Kibibyte as specified in ISO IEC 80000-13:2008 (1 Kibibyte = 1 024 Byte).
23 public final class Kibibyte
extends StorageUnit
<Kibibyte
> {
25 private static final long serialVersionUID
= 3798828851496657978L;
27 Kibibyte(@NonNull final BigInteger bytes
) {
32 * @param numberOfBytes
33 * The amount of bytes the Kibibyte contains.
34 * @return A new Kibibyte unit with the given value.
37 public static Kibibyte
valueOf(@NonNull final BigInteger numberOfBytes
) {
38 return new Kibibyte(numberOfBytes
);
42 * @param numberOfBytes
43 * The amount of bytes the Kibibyte contains.
44 * @return A new Kibibyte unit with the given value.
47 public static Kibibyte
valueOf(final long numberOfBytes
) {
48 return valueOf(asBigInteger(numberOfBytes
));
52 * @param numberOfBytes
53 * The amount of bytes the Kibibyte contains.
54 * @return A new Kibibyte unit with the given value.
57 public static Kibibyte
valueOf(@NonNull final Long numberOfBytes
) {
58 return valueOf(numberOfBytes
.longValue());
62 public Kibibyte
add(final long bytesToAdd
) {
63 return new Kibibyte(addNullsafe(bytes
, asBigInteger(bytesToAdd
)));
67 public Kibibyte
add(final StorageUnit
<?
> storageAmount
) {
68 return new Kibibyte(addNullsafe(bytes
, storageAmount
.bytes
));
72 public Kibibyte
divide(final long divisor
) {
73 return new Kibibyte(divideNullsafe(bytes
, asBigInteger(divisor
)));
77 public Kibibyte
multiply(final long factor
) {
78 return new Kibibyte(multiplyNullsafe(bytes
, asBigInteger(factor
)));
82 public Kibibyte
subtract(final long bytesToSubtract
) {
83 return new Kibibyte(subtractNullsafe(bytes
, asBigInteger(bytesToSubtract
)));
87 public Kibibyte
subtract(final StorageUnit
<?
> storageAmount
) {
88 return new Kibibyte(subtractNullsafe(bytes
, storageAmount
.bytes
));
92 protected BigInteger
getNumberOfBytesPerUnit() {
93 return StorageUnit
.BYTES_IN_A_KIBIBYTE
;
97 protected String
getSymbol() {
98 return "KiB"; //$NON-NLS-1$
102 protected Function
<@NonNull BigInteger
, @NonNull StorageUnit
<?
>> converter() {
103 return StorageUnits
::binaryValueOf
;