aboutsummaryrefslogtreecommitdiff
path: root/src/math/big/ratmarsh.go
diff options
context:
space:
mode:
authorMarvin Stenger <marvin.stenger94@gmail.com>2017-09-21 18:48:12 +0200
committerRobert Griesemer <gri@golang.org>2017-10-04 17:16:52 +0000
commitaa00c607e1c2e873ef0314eb3d029a4ab3bd7252 (patch)
treee9b0a6bcee747e47857e334e5717b0de86abb886 /src/math/big/ratmarsh.go
parent3a35e0253c8344ae4efb975e4bdc0cc53b841e0a (diff)
downloadgo-aa00c607e1c2e873ef0314eb3d029a4ab3bd7252.tar.gz
go-aa00c607e1c2e873ef0314eb3d029a4ab3bd7252.zip
math/big: remove []byte/string conversions
This removes some of the []byte/string conversions currently existing in the (un)marshaling methods of Int and Rat. For Int we introduce a new function (*Int).setFromScanner() essentially implementing the SetString method being given an io.ByteScanner instead of a string. So we can handle the string case in (*Int).SetString with a *strings.Reader and the []byte case in (*Int).UnmarshalText() with a *bytes.Reader now avoiding the []byte/string conversion here. For Rat we introduce a new function (*Rat).marshal() essentially implementing the String method outputting []byte instead of string. Using this new function and the same formatting rules as in (*Rat).RatString we can implement (*Rat).MarshalText() without the []byte/string conversion it used to have. Change-Id: Ic5ef246c1582c428a40f214b95a16671ef0a06d9 Reviewed-on: https://go-review.googlesource.com/65950 Reviewed-by: Robert Griesemer <gri@golang.org> Run-TryBot: Robert Griesemer <gri@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org>
Diffstat (limited to 'src/math/big/ratmarsh.go')
-rw-r--r--src/math/big/ratmarsh.go6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/math/big/ratmarsh.go b/src/math/big/ratmarsh.go
index b82e8d4ae8..fbc7b6002d 100644
--- a/src/math/big/ratmarsh.go
+++ b/src/math/big/ratmarsh.go
@@ -59,8 +59,10 @@ func (z *Rat) GobDecode(buf []byte) error {
// MarshalText implements the encoding.TextMarshaler interface.
func (x *Rat) MarshalText() (text []byte, err error) {
- // TODO(gri): get rid of the []byte/string conversion
- return []byte(x.RatString()), nil
+ if x.IsInt() {
+ return x.a.MarshalText()
+ }
+ return x.marshal(), nil
}
// UnmarshalText implements the encoding.TextUnmarshaler interface.