aboutsummaryrefslogtreecommitdiff
path: root/src/lib/bignum.go
diff options
context:
space:
mode:
authorRobert Griesemer <gri@golang.org>2008-11-06 12:13:52 -0800
committerRobert Griesemer <gri@golang.org>2008-11-06 12:13:52 -0800
commit66c6b13b03215ea13d1ce57cb0f685cf7edd5cb2 (patch)
treec88779b5869f31b880349df291b9e31101ee8f16 /src/lib/bignum.go
parent3a2c0a9615b3000f99d42647f4e811b960af755b (diff)
downloadgo-66c6b13b03215ea13d1ce57cb0f685cf7edd5cb2.tar.xz
- implemented String() and Format functionality in Bignum
- added a test R=r OCL=18687 CL=18687
Diffstat (limited to 'src/lib/bignum.go')
-rwxr-xr-xsrc/lib/bignum.go56
1 files changed, 50 insertions, 6 deletions
diff --git a/src/lib/bignum.go b/src/lib/bignum.go
index 3670c37057..0e086dc9d7 100755
--- a/src/lib/bignum.go
+++ b/src/lib/bignum.go
@@ -11,6 +11,7 @@ package Bignum
// - Integer signed integer numbers
// - Rational rational numbers
+import Fmt "fmt"
// ----------------------------------------------------------------------------
// Internal representation
@@ -675,7 +676,7 @@ func DivMod1(x *Natural, d Digit) (*Natural, Digit) {
}
-func (x *Natural) String(base uint) string {
+func (x *Natural) ToString(base uint) string {
if len(x) == 0 {
return "0";
}
@@ -702,6 +703,27 @@ func (x *Natural) String(base uint) string {
}
+func (x *Natural) String() string {
+ return x.ToString(10);
+}
+
+
+func FmtBase(c int) uint {
+ switch c {
+ case 'b': return 2;
+ case 'o': return 8;
+ case 'x': return 16;
+ }
+ return 10;
+}
+
+
+func (x *Natural) Format(h Fmt.Formatter, c int) {
+ t := x.ToString(FmtBase(c)); // BUG in 6g
+ Fmt.fprintf(h, "%s", t);
+}
+
+
func HexValue(ch byte) uint {
d := uint(1 << LogH);
switch {
@@ -1092,7 +1114,7 @@ func (x *Integer) Cmp(y *Integer) int {
}
-func (x *Integer) String(base uint) string {
+func (x *Integer) ToString(base uint) string {
if x.mant.IsZero() {
return "0";
}
@@ -1100,10 +1122,21 @@ func (x *Integer) String(base uint) string {
if x.sign {
s = "-";
}
- return s + x.mant.String(base);
+ return s + x.mant.ToString(base);
}
+func (x *Integer) String() string {
+ return x.ToString(10);
+}
+
+
+func (x *Integer) Format(h Fmt.Formatter, c int) {
+ t := x.ToString(FmtBase(c)); // BUG in 6g
+ Fmt.fprintf(h, "%s", t);
+}
+
+
// Determines base (octal, decimal, hexadecimal) if base == 0.
// Returns the number and base.
export func IntFromString(s string, base uint, slen *int) (*Integer, uint) {
@@ -1215,15 +1248,26 @@ func (x *Rational) Cmp(y *Rational) int {
}
-func (x *Rational) String(base uint) string {
- s := x.a.String(base);
+func (x *Rational) ToString(base uint) string {
+ s := x.a.ToString(base);
if !x.IsInt() {
- s += "/" + x.b.String(base);
+ s += "/" + x.b.ToString(base);
}
return s;
}
+func (x *Rational) String() string {
+ return x.ToString(10);
+}
+
+
+func (x *Rational) Format(h Fmt.Formatter, c int) {
+ t := x.ToString(FmtBase(c)); // BUG in 6g
+ Fmt.fprintf(h, "%s", t);
+}
+
+
// Determines base (octal, decimal, hexadecimal) if base == 0.
// Returns the number and base of the nominator.
export func RatFromString(s string, base uint, slen *int) (*Rational, uint) {