Skip to content

Commit 498e15b

Browse files
committed
Unit: improved support for power-of-two sizes for bytes
1 parent 0d9f312 commit 498e15b

File tree

1 file changed

+61
-4
lines changed

1 file changed

+61
-4
lines changed

scopehal/Unit.cpp

Lines changed: 61 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,27 @@ void Unit::GetSIScalingFactor(double num, double& scaleFactor, string& prefix) c
227227
prefix = "";
228228
num = fabs(num);
229229

230+
//Bytes: use binary rather than decimal scaling factors
231+
if(m_type == UNIT_BYTES)
232+
{
233+
if(num >= 1024)
234+
{
235+
scaleFactor = 1.0 / 1024;
236+
prefix = "k";
237+
}
238+
if(num >= 1024*1024)
239+
{
240+
scaleFactor = 1.0 / (1024*1024);
241+
prefix = "M";
242+
}
243+
if(num >= 1024*1024*1024)
244+
{
245+
scaleFactor = 1.0 / (1024*1024*1024);
246+
prefix = "G";
247+
}
248+
return;
249+
}
250+
230251
if(num >= 1e12f)
231252
{
232253
scaleFactor = 1e-12;
@@ -953,13 +974,29 @@ double Unit::ParseString(const string& str, bool useDisplayLocale)
953974
continue;
954975

955976
if(c == 'T')
977+
{
956978
scale = 1e12;
979+
if(m_type == UNIT_BYTES)
980+
scale = 1024 * 1024 * 1024 * 1024LL;
981+
}
957982
else if(c == 'G')
983+
{
958984
scale = 1e9;
985+
if(m_type == UNIT_BYTES)
986+
scale = 1024 * 1024 * 1024;
987+
}
959988
else if(c == 'M')
989+
{
960990
scale = 1e6;
991+
if(m_type == UNIT_BYTES)
992+
scale = 1024 * 1024;
993+
}
961994
else if(c == 'K' || c == 'k')
995+
{
962996
scale = 1e3;
997+
if(m_type == UNIT_BYTES)
998+
scale = 1024;
999+
}
9631000
else if(c == 'm')
9641001
scale = 1e-3;
9651002
else if( (c == 'u') || (str.find("μ", i) == i) )
@@ -1066,13 +1103,33 @@ int64_t Unit::ParseStringInt64(const string& str, bool useDisplayLocale)
10661103
continue;
10671104

10681105
if(c == 'T')
1069-
mulscale *= 1e12;
1106+
{
1107+
if(m_type == UNIT_BYTES)
1108+
mulscale *= 1024 * 1024 * 1024 * 1024LL;
1109+
else
1110+
mulscale *= 1e12;
1111+
}
10701112
else if(c == 'G')
1071-
mulscale *= 1e9;
1113+
{
1114+
if(m_type == UNIT_BYTES)
1115+
mulscale *= 1024 * 1024 * 1024;
1116+
else
1117+
mulscale *= 1e9;
1118+
}
10721119
else if(c == 'M')
1073-
mulscale *= 1e6;
1120+
{
1121+
if(m_type == UNIT_BYTES)
1122+
mulscale *= 1024 * 1024;
1123+
else
1124+
mulscale *= 1e6;
1125+
}
10741126
else if(c == 'K' || c == 'k')
1075-
mulscale *= 1e3;
1127+
{
1128+
if(m_type == UNIT_BYTES)
1129+
mulscale *= 1024;
1130+
else
1131+
mulscale *= 1e3;
1132+
}
10761133
else if(c == 'm')
10771134
divscale *= 1e3;
10781135
else if( (c == 'u') || (str.find("μ", i) == i) )

0 commit comments

Comments
 (0)