diff options
author | Marvin Stenger <marvin.stenger94@gmail.com> | 2017-09-21 18:48:12 +0200 |
---|---|---|
committer | Robert Griesemer <gri@golang.org> | 2017-10-04 17:16:52 +0000 |
commit | aa00c607e1c2e873ef0314eb3d029a4ab3bd7252 (patch) | |
tree | e9b0a6bcee747e47857e334e5717b0de86abb886 /src/math/big/ratmarsh.go | |
parent | 3a35e0253c8344ae4efb975e4bdc0cc53b841e0a (diff) | |
download | go-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.go | 6 |
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. |