123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
|
/**
* An minimal implementation of the deprecated octal literals
*
* Copyright: Copyright (C) 2011 Pavel Sountsov. All rights reserved.
* License: BSD style: $(LICENSE)
* Authors: Pavel Sountsov
*/
module tango.core.Octal;
T toOctal(T)(T decimal)
{
T ret = 0;
uint power = 0;
int sign = 1;
if(decimal < 0)
{
decimal = -decimal;
sign = -1;
}
while(decimal > 0)
{
int digit = decimal % 10;
assert(digit < 8, "Only digits [0..7] are allowed in octal literals");
ret += digit << power;
decimal /= 10;
power += 3;
}
return ret * sign;
}
template octal(int decimal)
{
enum octal = toOctal(decimal);
}
template octalU(uint decimal)
{
enum octal = toOctal(decimal);
}
template octalL(long decimal)
{
enum octal = toOctal(decimal);
}
template octalUL(ulong decimal)
{
enum octal = toOctal(decimal);
}
debug(UnitTest)
{
unittest
{
assert(octal!(764) == 500);
assert(octal!(1) == 1);
assert(octal!(0) == 0);
assert(octal!(-10) == -8);
}
}
|