new object $integer: $libraries;
var $integer ones = ["one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"];
var $integer teens = ["eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"];
var $integer tens = ["ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety"];
var $root created_on = 796268969;
var $root flags = ['methods, 'code, 'variables, 'core];
var $root help_node = $help_obj_integer;
var $root inited = 1;
var $root managed = [$integer];
var $root manager = $integer;
public method ._range_type() {
arg type;
switch (type) {
case "0" .. "9":
return toint(type);
case "$":
return 'end;
case ".":
return 'cur;
case "#", "^":
return 'bgn;
default:
throw(~invrange, ("Invalid range character \"" + type) + "\".", type);
}
};
public method .and(): native;
public method .n_to_nth() {
arg number;
var tens_digit_is_1, ones_digit, single_digit;
if (type(number) != 'integer)
throw(~type, "Must receive an integer");
ones_digit = abs(number) % 10;
tens_digit_is_1 = ((abs(number) / 10) % 10) == 1;
single_digit = abs(number) < 10;
if ((ones_digit in [1, 2, 3]) && (!tens_digit_is_1)) {
switch (ones_digit) {
case 1:
return tostr(number) + "st";
case 2:
return tostr(number) + "nd";
case 3:
return tostr(number) + "rd";
}
} else {
return tostr(number) + "th";
}
};
public method .not(): native;
public method .or(): native;
public method .parse_range() {
arg range;
var r1, r2, reg;
if ("-" in range) {
reg = regexp(range, "([0-9^#\.]+) *- *([0-9\$\.]+)");
return [(> ._range_type(reg[1]) <), (> ._range_type(reg[2]) <)];
} else {
return [(> ._range_type(range) <), 'none];
}
// ("1-5") => (1, 5) -- 1, 5
// ("1-$") => (1, 'end) -- 1, 'end (end number)
// (".-3") => ('cur, 3) -- 'cur (current number), 3
// ("^-3") => ('bgn, 3) -- 'bgn (beginning number), 3
// ("#-3") => ('bgn, 3) -- 'bgn (beginning number), 3
};
public method .range() {
arg x, y;
var element;
return map element in [x .. y] to (element);
};
public method .roman_numeral_scheme() {
arg val, x, y, z;
var rnlist;
rnlist = [x, x * 2, x * 3, x + y, y, y + x, y + (x * 2), y + (x * 3), x + z];
return rnlist[val];
};
public method .shleft(): native;
public method .shright(): native;
public method .to_bytes() {
arg num, @long;
var s;
if (num > 1073741824) {
num /= 1.07374e+09;
s = long ? " gigabytes" : " gb";
} else if (num > 1048576) {
num /= 1.04858e+06;
s = long ? " megabytes" : " mb";
} else if (num > 1024) {
num /= 1024.0;
s = long ? " kilobytes" : " kb";
} else {
s = long ? " bytes" : " b";
}
num = strsed(tostr(num), "\.0+", "");
return num + s;
};
public method .to_english() {
arg num;
var num_str, sign;
// 12500 => "12,500"
// if (abs(num) < 9999)
// return tostr(num);
sign = num ? (abs(num) / num) : 1;
num = abs(num);
num_str = "";
while (num > 999) {
num_str = ("," + (tostr(1000 + (num % 1000)).subrange(2))) + num_str;
num = num / 1000;
}
num_str = tostr(num) + num_str;
return ((sign == 1) ? "" : "-") + num_str;
};
public method .to_english_text() {
arg number;
var an, isneg, temp;
an = abs(number);
isneg = (number < 0) ? "negative " : "";
if (!number)
return "zero";
if (an < 11)
return isneg + (ones[an]);
if (an < 20)
return isneg + (teens[an - 10]);
if (an < 100)
return (isneg + (tens[an / 10])) + ((temp = an % 10) ? ("-" + (temp.to_english_text())) : "");
if (an < 1000)
return ((isneg + (ones[an / 100])) + " hundred") + ((temp = an % 100) ? (" " + (temp.to_english_text())) : "");
if (an < 1000000)
return ((isneg + ((an / 1000).to_english_text())) + " thousand") + ((temp = an % 1000) ? (" " + (temp.to_english_text())) : "");
if (an < 1000000000)
return ((isneg + ((an / 1000000).to_english_text())) + " million") + ((temp = an % 1000000) ? (" " + (temp.to_english_text())) : "");
return ((isneg + ((an / 1000000000).to_english_text())) + " billion") + ((temp = an % 1000000) ? (" " + (temp.to_english_text())) : "");
// $#Written by: Kipp
};
public method .to_roman_numeral() {
arg num;
var str, neg, methstr;
str = "";
neg = "";
// Handle negatives:
if (num < 0) {
neg = "negative ";
num = abs(num);
}
if (num >= 1000000)
return "Out of range";
if (num >= 1000) {
str = "M" * (num / 1000);
num = num % 1000;
if (num == 0)
return str;
}
if (num >= 100) {
str = str + ((num / 100).roman_numeral_scheme("C", "D", "M"));
num = num % 100;
if (num == 0)
return str;
}
if (num >= 10) {
str = str + ((num / 10).roman_numeral_scheme("X", "L", "C"));
num = num % 10;
if (num == 0)
return str;
}
if (num > 0)
str = str + (num.roman_numeral_scheme("I", "V", "X"));
else if (!str)
str = "";
return neg + str;
};
public method .to_string() {
arg number;
return (> tostr(number) <);
};
public method .xor(): native;