Skip to content

Commit 096f194

Browse files
committed
Add information units for multiples of 1000 and 1024
For both bits and bytes. Metric: Kilobits, megabits, gigabits... Kilobytes, megabytes, gigabytes... IEC: Kibibits, mebibits, gibibits... Kibibytes, mebibytes, gibibytes...
1 parent fb1c4c7 commit 096f194

38 files changed

+1389
-593
lines changed

Src/Scripts/Include-GenerateUnitClassSourceCode.ps1

Lines changed: 29 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ function GenerateUnitClassSourceCode($unitClass)
22
{
33
$className = $unitClass.Name;
44
$units = $unitClass.Units;
5+
$baseType = $unitClass.BaseType;
56
$baseUnit = $units | where { $_.SingularName -eq $unitClass.BaseUnit }
67
$baseUnitSingularName = $baseUnit.SingularName
78
$baseUnitPluralName = $baseUnit.PluralName
8-
$baseUnitPluralNameLower = $baseUnitPluralName.ToLowerInvariant()
9-
$baseUnitFieldName = $baseUnitPluralName;
9+
$baseUnitPluralNameLower = $baseUnitPluralName.ToLowerInvariant()
1010
$unitEnumName = "$className" + "Unit";
11+
$baseUnitFieldName = "_"+[Char]::ToLowerInvariant($baseUnitPluralName[0]) + $baseUnitPluralName.Substring(1);
1112

1213
@"
1314
// Copyright © 2007 by Initial Force AS. All rights reserved.
@@ -50,20 +51,16 @@ namespace UnitsNet
5051
/// <summary>
5152
/// Base unit of $className.
5253
/// </summary>
53-
[UsedImplicitly] public readonly double $baseUnitPluralName;
54+
private readonly $baseType $baseUnitFieldName;
5455
55-
public $className(double $baseUnitPluralNameLower) : this()
56+
public $className($baseType $baseUnitPluralNameLower) : this()
5657
{
57-
$baseUnitPluralName = $baseUnitPluralNameLower;
58+
$baseUnitFieldName = $baseUnitPluralNameLower;
5859
}
5960
6061
#region Properties
6162
"@; foreach ($unit in $units) {
62-
# Base unit already has a public readonly field
63-
if ($unit.SingularName -eq $baseUnitSingularName) { continue; }
64-
65-
$propertyName = $unit.PluralName;
66-
$baseUnitPluralNameLower = $baseUnitPluralName.ToLowerInvariant();
63+
$propertyName = $unit.PluralName;
6764
$fromBaseToUnitFunc = $unit.FromBaseToUnitFunc.Replace("x", $baseUnitFieldName);@"
6865
6966
/// <summary>
@@ -73,7 +70,7 @@ namespace UnitsNet
7370
{
7471
get { return $fromBaseToUnitFunc; }
7572
}
76-
"@; }@"
73+
"@; }@"
7774
7875
#endregion
7976
@@ -85,7 +82,7 @@ namespace UnitsNet
8582
}
8683
8784
"@; foreach ($unit in $units) {
88-
$valueParamName = $unit.PluralName.ToLowerInvariant();
85+
$valueParamName = $unit.PluralName.ToLowerInvariant();
8986
$func = $unit.FromUnitToBaseFunc.Replace("x", $valueParamName);@"
9087
/// <summary>
9188
/// Get $className from $($unit.PluralName).
@@ -95,7 +92,7 @@ namespace UnitsNet
9592
return new $className($func);
9693
}
9794
98-
"@; }@"
95+
"@; }@"
9996
10097
/// <summary>
10198
/// Dynamically convert from value and unit enum <see cref="$unitEnumName" /> to <see cref="$className" />.
@@ -110,7 +107,7 @@ namespace UnitsNet
110107
"@; foreach ($unit in $units) {@"
111108
case $unitEnumName.$($unit.SingularName):
112109
return From$($unit.PluralName)(value);
113-
"@; }@"
110+
"@; }@"
114111
115112
default:
116113
throw new NotImplementedException("fromUnit: " + fromUnit);
@@ -135,37 +132,37 @@ namespace UnitsNet
135132
136133
public static $className operator -($className right)
137134
{
138-
return new $className(-right.$baseUnitPluralName);
135+
return new $className(-right.$baseUnitFieldName);
139136
}
140137
141138
public static $className operator +($className left, $className right)
142139
{
143-
return new $className(left.$baseUnitPluralName + right.$baseUnitPluralName);
140+
return new $className(left.$baseUnitFieldName + right.$baseUnitFieldName);
144141
}
145142
146143
public static $className operator -($className left, $className right)
147144
{
148-
return new $className(left.$baseUnitPluralName - right.$baseUnitPluralName);
145+
return new $className(left.$baseUnitFieldName - right.$baseUnitFieldName);
149146
}
150147
151-
public static $className operator *(double left, $className right)
148+
public static $className operator *($baseType left, $className right)
152149
{
153-
return new $className(left*right.$baseUnitPluralName);
150+
return new $className(left*right.$baseUnitFieldName);
154151
}
155152
156153
public static $className operator *($className left, double right)
157154
{
158-
return new $className(left.$baseUnitPluralName*right);
155+
return new $className(left.$baseUnitFieldName*($baseType)right);
159156
}
160157
161158
public static $className operator /($className left, double right)
162159
{
163-
return new $className(left.$baseUnitPluralName/right);
160+
return new $className(left.$baseUnitFieldName/($baseType)right);
164161
}
165162
166163
public static double operator /($className left, $className right)
167164
{
168-
return left.$baseUnitPluralName/right.$baseUnitPluralName;
165+
return Convert.ToDouble(left.$baseUnitFieldName/right.$baseUnitFieldName);
169166
}
170167
171168
#endregion
@@ -181,39 +178,39 @@ namespace UnitsNet
181178
182179
public int CompareTo($className other)
183180
{
184-
return $baseUnitPluralName.CompareTo(other.$baseUnitPluralName);
181+
return $baseUnitFieldName.CompareTo(other.$baseUnitFieldName);
185182
}
186183
187184
public static bool operator <=($className left, $className right)
188185
{
189-
return left.$baseUnitPluralName <= right.$baseUnitPluralName;
186+
return left.$baseUnitFieldName <= right.$baseUnitFieldName;
190187
}
191188
192189
public static bool operator >=($className left, $className right)
193190
{
194-
return left.$baseUnitPluralName >= right.$baseUnitPluralName;
191+
return left.$baseUnitFieldName >= right.$baseUnitFieldName;
195192
}
196193
197194
public static bool operator <($className left, $className right)
198195
{
199-
return left.$baseUnitPluralName < right.$baseUnitPluralName;
196+
return left.$baseUnitFieldName < right.$baseUnitFieldName;
200197
}
201198
202199
public static bool operator >($className left, $className right)
203200
{
204-
return left.$baseUnitPluralName > right.$baseUnitPluralName;
201+
return left.$baseUnitFieldName > right.$baseUnitFieldName;
205202
}
206203
207204
public static bool operator ==($className left, $className right)
208205
{
209206
// ReSharper disable once CompareOfFloatsByEqualityOperator
210-
return left.$baseUnitPluralName == right.$baseUnitPluralName;
207+
return left.$baseUnitFieldName == right.$baseUnitFieldName;
211208
}
212209
213210
public static bool operator !=($className left, $className right)
214211
{
215212
// ReSharper disable once CompareOfFloatsByEqualityOperator
216-
return left.$baseUnitPluralName != right.$baseUnitPluralName;
213+
return left.$baseUnitFieldName != right.$baseUnitFieldName;
217214
}
218215
219216
public override bool Equals(object obj)
@@ -223,12 +220,12 @@ namespace UnitsNet
223220
return false;
224221
}
225222
226-
return $baseUnitPluralName.Equals((($className) obj).$baseUnitPluralName);
223+
return $baseUnitFieldName.Equals((($className) obj).$baseUnitFieldName);
227224
}
228225
229226
public override int GetHashCode()
230227
{
231-
return $baseUnitPluralName.GetHashCode();
228+
return $baseUnitFieldName.GetHashCode();
232229
}
233230
234231
#endregion
@@ -244,7 +241,7 @@ namespace UnitsNet
244241
{
245242
switch (unit)
246243
{
247-
"@; foreach ($unit in $units) {@"
244+
"@; foreach ($unit in $units) {@"
248245
case $unitEnumName.$($unit.SingularName):
249246
return $($unit.PluralName);
250247
"@; }@"

Src/Scripts/Include-GenerateUnitTestBaseClassSourceCode.ps1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
function GenerateUnitTestBaseClassSourceCode($unitClass)
22
{
33
$className = $unitClass.Name;
4+
$baseType = $unitClass.BaseType;
45
$units = $unitClass.Units;
56
$baseUnit = $units | where { $_.SingularName -eq $unitClass.BaseUnit }
67
$baseUnitPluralName = $baseUnit.PluralName
@@ -52,7 +53,7 @@ namespace UnitsNet.Tests
5253
5354
// ReSharper disable VirtualMemberNeverOverriden.Global
5455
"@; foreach ($unit in $units) {@"
55-
protected virtual double $($unit.PluralName)Tolerance { get { return 1E-5; } }
56+
protected virtual double $($unit.PluralName)Tolerance { get { return 1e-5; } }
5657
"@; }@"
5758
// ReSharper restore VirtualMemberNeverOverriden.Global
5859

Src/Scripts/UnitDefinitions/Information.json

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
{
22
"Name": "Information",
33
"BaseUnit": "Bit",
4+
"BaseType": "decimal",
45
"XmlDoc": "In computing and telecommunications, a unit of information is the capacity of some standard data storage system or communication channel, used to measure the capacities of other systems and channels. In information theory, units of information are also used to measure the information contents or entropy of random variables.",
56
"Units": [
67
{
78
"SingularName": "Byte",
89
"PluralName": "Bytes",
9-
"FromUnitToBaseFunc": "x*8",
10-
"FromBaseToUnitFunc": "x/8",
11-
"Prefixes": ["Kilo","Mega","Giga","Tera","Peta","Exa"],
10+
"FromUnitToBaseFunc": "x*8m",
11+
"FromBaseToUnitFunc": "x/8m",
12+
"Prefixes": ["Kilo","Mega","Giga","Tera","Peta","Exa","Kibi","Mebi","Gibi","Tebi","Pebi","Exbi"],
1213
"Localization": [
1314
{
1415
"Culture": "en-US",
@@ -21,6 +22,7 @@
2122
"PluralName": "Bits",
2223
"FromUnitToBaseFunc": "x",
2324
"FromBaseToUnitFunc": "x",
25+
"Prefixes": ["Kilo","Mega","Giga","Tera","Peta","Exa","Kibi","Mebi","Gibi","Tebi","Pebi","Exbi"],
2426
"Localization": [
2527
{
2628
"Culture": "en-US",

Src/UnitsNet/GeneratedCode/Enums/InformationUnit.g.cs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,29 @@ public enum InformationUnit
2727
Undefined = 0,
2828
Bit,
2929
Byte,
30+
Exabit,
3031
Exabyte,
32+
Exbibit,
33+
Exbibyte,
34+
Gibibit,
35+
Gibibyte,
36+
Gigabit,
3137
Gigabyte,
38+
Kibibit,
39+
Kibibyte,
40+
Kilobit,
3241
Kilobyte,
42+
Mebibit,
43+
Mebibyte,
44+
Megabit,
3345
Megabyte,
46+
Pebibit,
47+
Pebibyte,
48+
Petabit,
3449
Petabyte,
50+
Tebibit,
51+
Tebibyte,
52+
Terabit,
3553
Terabyte,
3654
}
3755
}

0 commit comments

Comments
 (0)