summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2017-11-25 17:10:59 +0100
committerEugen Wissner <belka@caraus.de>2017-11-25 17:10:59 +0100
commitb28dde9d8e3c53d73353fa5633dcb0da004e5abb (patch)
treec5b84f35a228d0890f3699787f60b32b10c64c04
parentb612e978bfe1bf224cb35d7f57e893818cd57728 (diff)
downloadtanya-b28dde9d8e3c53d73353fa5633dcb0da004e5abb.tar.gz
Remove triplet comma
-rw-r--r--source/tanya/format/package.d205
1 files changed, 49 insertions, 156 deletions
diff --git a/source/tanya/format/package.d b/source/tanya/format/package.d
index 44572e3..eae0cf9 100644
--- a/source/tanya/format/package.d
+++ b/source/tanya/format/package.d
@@ -21,7 +21,6 @@ import tanya.meta.metafunction;
import tanya.range.array;
private enum special = 0x7000;
-private enum char comma = ',';
private enum char period = '.';
private static const ulong[20] powersOf10 = [
@@ -456,7 +455,6 @@ private enum Modifier : uint
leading0x = 8,
leadingZero = 16,
intMax = 32,
- tripletComma = 64,
negative = 128,
halfWidth = 512,
}
@@ -588,11 +586,6 @@ pure nothrow @nogc
fl |= Modifier.leading0x;
f.popFront();
continue;
- // If we have thousand commas.
- case '\'':
- fl |= Modifier.tripletComma;
- f.popFront();
- continue;
// If we have leading zero.
case '0':
fl |= Modifier.leadingZero;
@@ -680,7 +673,7 @@ pure nothrow @nogc
char[8] tail;
char *s;
const(char)* h;
- uint l, n, cs;
+ uint l, n;
ulong n64;
double fv;
@@ -745,7 +738,6 @@ pure nothrow @nogc
tail[0] = 0;
precision = 0;
decimalPos = 0;
- cs = 0;
// Copy the string in.
goto scopy;
@@ -758,7 +750,6 @@ pure nothrow @nogc
tail[0] = 0;
precision = 0;
decimalPos = 0;
- cs = 0;
goto scopy;
case 'n': // Weird write-bytes specifier.
@@ -856,7 +847,6 @@ pure nothrow @nogc
decimalPos = cast(int) (s - sn);
l = cast(int) (s - (num.ptr + 64));
s = num.ptr + 64;
- cs = 1 + (3 << 24);
goto scopy;
case 'G': // Float.
@@ -951,7 +941,6 @@ pure nothrow @nogc
if (decimalPos == special)
{
s = cast(char*) sn;
- cs = 0;
precision = 0;
goto scopy;
}
@@ -1002,7 +991,6 @@ pure nothrow @nogc
--n;
decimalPos /= 10;
}
- cs = 1 + (3 << 24); // How many tens.
goto flt_lead;
case 'f': // Float.
@@ -1023,7 +1011,6 @@ pure nothrow @nogc
if (decimalPos == special)
{
s = cast(char*) sn;
- cs = 0;
precision = 0;
goto scopy;
}
@@ -1075,70 +1062,46 @@ pure nothrow @nogc
--i;
}
tz = precision - (n + l);
- // How many tens did we write (for commas below).
- cs = 1 + (3 << 24);
}
else
{
- cs = (fl & Modifier.tripletComma) ? ((600 - cast(uint) decimalPos) % 3) : 0;
if (cast(uint) decimalPos >= l)
{
// Handle xxxx000*000.0.
n = 0;
for (;;)
{
- if ((fl & Modifier.tripletComma) && (++cs == 4))
- {
- cs = 0;
- *s++ = comma;
- }
- else
+ *s++ = sn[n];
+ ++n;
+ if (n >= l)
{
- *s++ = sn[n];
- ++n;
- if (n >= l)
- {
- break;
- }
+ break;
}
}
if (n < cast(uint) decimalPos)
{
n = decimalPos - n;
- if ((fl & Modifier.tripletComma) == 0)
+ while (n)
{
- while (n)
- {
- if (((cast(size_t) s) & 3) == 0)
- {
- break;
- }
- *s++ = '0';
- --n;
- }
- while (n >= 4)
+ if (((cast(size_t) s) & 3) == 0)
{
- *cast(uint*) s = 0x30303030;
- s += 4;
- n -= 4;
+ break;
}
+ *s++ = '0';
+ --n;
+ }
+ while (n >= 4)
+ {
+ *cast(uint*) s = 0x30303030;
+ s += 4;
+ n -= 4;
}
while (n)
{
- if ((fl & Modifier.tripletComma) && (++cs == 4))
- {
- cs = 0;
- *s++ = comma;
- }
- else
- {
- *s++ = '0';
- --n;
- }
+ *s++ = '0';
+ --n;
}
}
- // cs is how many tens.
- cs = cast(int) (s - (num.ptr + 64)) + (3 << 24);
if (precision)
{
*s++ = period;
@@ -1151,23 +1114,13 @@ pure nothrow @nogc
n = 0;
for (;;)
{
- if ((fl & Modifier.tripletComma) && (++cs == 4))
- {
- cs = 0;
- *s++ = comma;
- }
- else
+ *s++ = sn[n];
+ ++n;
+ if (n >= cast(uint) decimalPos)
{
- *s++ = sn[n];
- ++n;
- if (n >= cast(uint) decimalPos)
- {
- break;
- }
+ break;
}
}
- // cs is how many tens.
- cs = cast(int) (s - (num.ptr + 64)) + (3 << 24);
if (precision)
{
*s++ = period;
@@ -1259,7 +1212,6 @@ pure nothrow @nogc
if (precision == 0)
{
l = 0;
- cs = (((l >> 4) & 15)) << 24;
goto scopy;
}
}
@@ -1272,18 +1224,7 @@ pure nothrow @nogc
{
break;
}
- if (fl & Modifier.tripletComma)
- {
- ++l;
- if ((l & 15) == ((l >> 4) & 15))
- {
- l &= ~15;
- *--s = comma;
- }
- }
}
- // Get the tens and the comma position.
- cs = cast(uint) ((num.ptr + NUMSZ) - s) + ((((l >> 4) & 15)) << 24);
// Get the length that we copied.
l = cast(uint)((num.ptr + NUMSZ) - s);
// Copy it.
@@ -1333,28 +1274,16 @@ pure nothrow @nogc
n = cast(uint) n64;
n64 = 0;
}
- if ((fl & Modifier.tripletComma) == 0)
+ while (n)
{
- while (n)
- {
- s -= 2;
- *cast(ushort*) s = *cast(ushort*) &digitpair[(n % 100) * 2];
- n /= 100;
- }
+ s -= 2;
+ *cast(ushort*) s = *cast(ushort*) &digitpair[(n % 100) * 2];
+ n /= 100;
}
while (n)
{
- if ((fl & Modifier.tripletComma) && (l++ == 3))
- {
- l = 0;
- *--s = comma;
- --o;
- }
- else
- {
- *--s = cast(char) (n % 10) + '0';
- n /= 10;
- }
+ *--s = cast(char) (n % 10) + '0';
+ n /= 10;
}
if (n64 == 0)
{
@@ -1366,16 +1295,7 @@ pure nothrow @nogc
}
while (s != o)
{
- if ((fl & Modifier.tripletComma) && (l++ == 3))
- {
- l = 0;
- *--s = comma;
- --o;
- }
- else
- {
- *--s = '0';
- }
+ *--s = '0';
}
}
@@ -1389,7 +1309,6 @@ pure nothrow @nogc
*--s = '0';
l = 1;
}
- cs = l + (3 << 24);
if (precision < 0)
{
precision = 0;
@@ -1418,10 +1337,6 @@ pure nothrow @nogc
precision = (fw > precision) ? fw : precision;
fw = 0;
}
- else
- {
- fl &= ~Modifier.tripletComma; // if no leading zeros, then no commas
- }
}
// Copy the spaces and/or zeros.
@@ -1473,49 +1388,28 @@ pure nothrow @nogc
}
// Copy leading zeros.
- uint c = cs >> 24;
- cs &= 0xffffff;
- if (fl & Modifier.tripletComma)
- {
- cs = cast(uint) (c - ((precision + cs) % (c + 1)));
- }
- else
- {
- cs = 0;
- }
while (precision > 0)
{
i = precision;
precision -= i;
- if ((fl & Modifier.tripletComma) == 0)
+ while (i)
{
- while (i)
- {
- if (((cast(size_t) bf) & 3) == 0)
- {
- break;
- }
- *bf++ = '0';
- --i;
- }
- while (i >= 4)
+ if (((cast(size_t) bf) & 3) == 0)
{
- *cast(uint*) bf = 0x30303030;
- bf += 4;
- i -= 4;
+ break;
}
+ *bf++ = '0';
+ --i;
+ }
+ while (i >= 4)
+ {
+ *cast(uint*) bf = 0x30303030;
+ bf += 4;
+ i -= 4;
}
while (i)
{
- if ((fl & Modifier.tripletComma) && (cs++ == c))
- {
- cs = 0;
- *bf++ = comma;
- }
- else
- {
- *bf++ = '0';
- }
+ *bf++ = '0';
--i;
}
}
@@ -1627,7 +1521,6 @@ pure nothrow @nogc
tail[0] = 0;
precision = 0;
decimalPos = 0;
- cs = 0;
goto scopy;
}
f.popFront();
@@ -1647,7 +1540,7 @@ nothrow
return result;
}
-private nothrow unittest
+nothrow unittest
{
char[318] buffer;
@@ -1663,12 +1556,12 @@ private nothrow unittest
assert(format!"%#x"(buffer, 20) == "0x14");
assert(format!"%#o"(buffer, 8) == "010");
assert(format!"%#b"(buffer, 3) == "0b11");
- assert(format!"%'d"(buffer, 1000) == "1,000");
+ assert(format!"%d"(buffer, 1000) == "1000");
assert(format!"%*d"(buffer, 5, 1) == " 1");
assert(format!"%.1f"(buffer, 10.25) == "10.3");
assert(format!"%.*f"(buffer, 1, 10.25) == "10.3");
assert(format!"%-9i"(buffer, 1) == "1 ");
- assert(format!"%'07.3g"(buffer, 0.01) == ",000.01");
+ assert(format!"%07.3g"(buffer, 0.01) == "0000.01");
// Integer size.
assert(format!"%hd"(buffer, 10) == "10");
@@ -1694,10 +1587,10 @@ private nothrow unittest
assert(format!"%b"(buffer, 3) == "11");
assert(format!"%B"(buffer, 3) == "11");
assert(format!"%.0x"(buffer, 0) == "");
- assert(format!"%'x"(buffer, 11111111) == "a9,8ac7");
+ assert(format!"%x"(buffer, 11111111) == "a98ac7");
assert(format!"%d"(buffer, 100000001) == "100000001");
assert(format!"%.12d"(buffer, 99999999L) == "000099999999");
- assert(format!"%'d"(buffer, 100000001) == "100,000,001");
+ assert(format!"%d"(buffer, 100000001) == "100000001");
// Count of bytes written so far.
{
@@ -1734,14 +1627,14 @@ private nothrow unittest
assert(format!"%e"(buffer, double.init) == "NaN");
assert(format!"%f"(buffer, 1e-307) == "0.000000");
assert(format!"%f"(buffer, 1e+8) == "100000000.000000");
- assert(format!"%'05g"(buffer, 111234.1) == "111,234");
+ assert(format!"%05g"(buffer, 111234.1) == "111234");
assert(format!"%.2g"(buffer, double.init) == "Na");
assert(format!"%.1e"(buffer, 0.999) == "1.0e+00");
assert(format!"%.0f"(buffer, 0.999) == "1");
assert(format!"%.9f"(buffer, 1e-307) == "0.000000000");
assert(format!"%g"(buffer, 0x1p-16382L)); // "6.95336e-310"
- assert(format!"%'f"(buffer, 1e+3) == "1,000.000000");
- assert(format!"%'g"(buffer, 38234.1234) == "38,234.1");
+ assert(format!"%f"(buffer, 1e+3) == "1000.000000");
+ assert(format!"%g"(buffer, 38234.1234) == "38234.1");
// Pointer conversions.
{