diff options
| author | Robert Griesemer <gri@golang.org> | 2008-11-06 12:13:52 -0800 |
|---|---|---|
| committer | Robert Griesemer <gri@golang.org> | 2008-11-06 12:13:52 -0800 |
| commit | 66c6b13b03215ea13d1ce57cb0f685cf7edd5cb2 (patch) | |
| tree | c88779b5869f31b880349df291b9e31101ee8f16 /src/lib/bignum.go | |
| parent | 3a2c0a9615b3000f99d42647f4e811b960af755b (diff) | |
| download | go-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-x | src/lib/bignum.go | 56 |
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) { |
