1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
use super::Bit;
#[cfg(feature = "u128")]
use super::RONNABIT;
/// Constant `Bit`s.
#[rustfmt::skip]
impl Bit {
/// One bit.
pub const BIT: Bit = Bit(1);
/// 1 Kbit = 10<sup>3</sup> bits.
pub const KILOBIT: Bit = Bit(1_000);
/// 1 Mbit = 10<sup>6</sup> bits.
pub const MEGABIT: Bit = Bit(1_000_000);
/// 1 Gbit = 10<sup>9</sup> bits.
pub const GIGABIT: Bit = Bit(1_000_000_000);
/// 1 Tbit = 10<sup>12</sup> bits.
pub const TERABIT: Bit = Bit(1_000_000_000_000);
/// 1 Pbit = 10<sup>15</sup> bits.
pub const PETABIT: Bit = Bit(1_000_000_000_000_000);
/// 1 Ebit = 10<sup>18</sup> bits.
pub const EXABIT: Bit = Bit(1_000_000_000_000_000_000);
#[cfg(feature = "u128")]
/// 1 Zbit = 10<sup>21</sup> bits.
pub const ZETTABIT: Bit = Bit(1_000_000_000_000_000_000_000);
#[cfg(feature = "u128")]
/// 1 Ybit = 10<sup>24</sup> bits.
pub const YOTTABIT: Bit = Bit(1_000_000_000_000_000_000_000_000);
/// 1 Kibit = 2<sup>10</sup> bits.
pub const KIBIBIT: Bit = Bit(1 << 10);
/// 1 Mibit = 2<sup>20</sup> bits.
pub const MEBIBIT: Bit = Bit(1 << 20);
/// 1 Gibit = 2<sup>30</sup> bits.
pub const GIBIBIT: Bit = Bit(1 << 30);
/// 1 Tibit = 2<sup>40</sup> bits.
pub const TEBIBIT: Bit = Bit(1 << 40);
/// 1 Pibit = 2<sup>50</sup> bits.
pub const PEBIBIT: Bit = Bit(1 << 50);
/// 1 Eibit = 2<sup>60</sup> bits.
pub const EXBIBIT: Bit = Bit(1 << 60);
#[cfg(feature = "u128")]
/// 1 Zibit = 2<sup>70</sup> bits.
pub const ZEBIBIT: Bit = Bit(1 << 70);
#[cfg(feature = "u128")]
/// 1 Yibit = 2<sup>80</sup> bits.
pub const YOBIBIT: Bit = Bit(1 << 80);
/// 1 KB = 8 * 10<sup>3</sup> bits.
pub const KILOBYTE: Bit = Bit::KILOBIT.mul_8();
/// 1 MB = 8 * 10<sup>6</sup> bits.
pub const MEGABYTE: Bit = Bit::MEGABIT.mul_8();
/// 1 GB = 8 * 10<sup>9</sup> bits.
pub const GIGABYTE: Bit = Bit::GIGABIT.mul_8();
/// 1 TB = 8 * 10<sup>12</sup> bits.
pub const TERABYTE: Bit = Bit::TERABIT.mul_8();
/// 1 PB = 8 * 10<sup>15</sup> bits.
pub const PETABYTE: Bit = Bit::PETABIT.mul_8();
/// 1 EB = 8 * 10<sup>18</sup> bits.
pub const EXABYTE: Bit = Bit::EXABIT.mul_8();
#[cfg(feature = "u128")]
/// 1 ZB = 8 * 10<sup>21</sup> bits.
pub const ZETTABYTE: Bit = Bit::ZETTABIT.mul_8();
#[cfg(feature = "u128")]
/// 1 YB = 8 * 10<sup>24</sup> bits.
pub const YOTTABYTE: Bit = Bit::YOTTABIT.mul_8();
/// 1 KiB = 2<sup>13</sup> bits.
pub const KIBIBYTE: Bit = Bit::KIBIBIT.mul_8();
/// 1 MiB = 2<sup>23</sup> bits.
pub const MEBIBYTE: Bit = Bit::MEBIBIT.mul_8();
/// 1 GiB = 2<sup>33</sup> bits.
pub const GIBIBYTE: Bit = Bit::GIBIBIT.mul_8();
/// 1 TiB = 2<sup>43</sup> bits.
pub const TEBIBYTE: Bit = Bit::TEBIBIT.mul_8();
/// 1 PiB = 2<sup>53</sup> bits.
pub const PEBIBYTE: Bit = Bit::PEBIBIT.mul_8();
/// 1 EiB = 2<sup>63</sup> bits.
pub const EXBIBYTE: Bit = Bit::EXBIBIT.mul_8();
#[cfg(feature = "u128")]
/// 1 ZiB = 2<sup>73</sup> bits.
pub const ZEBIBYTE: Bit = Bit::ZEBIBIT.mul_8();
#[cfg(feature = "u128")]
/// 1 YiB = 2<sup>83</sup> bits.
pub const YOBIBYTE: Bit = Bit::YOBIBIT.mul_8();
/// 0 bit.
pub const MIN: Bit = Bit(0);
/// **10<sup>27</sup> - 1** bits if the `u128` feature is enabled, or **2<sup>64</sup> - 1** otherwise.
pub const MAX: Bit = {
#[cfg(feature = "u128")]
{
Bit(RONNABIT - 1)
}
#[cfg(not(feature = "u128"))]
{
Bit(u64::MAX)
}
};
}