From d548cdd86f1c80ae97944c76a192b070c8bc4a3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=BA=90=E6=96=87=E9=9B=A8?= <41315874+fumiama@users.noreply.github.com> Date: Wed, 19 Apr 2023 15:33:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BB=A3=E7=A0=81=E7=BB=93?= =?UTF-8?q?=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- base14.go | 12 ++++++------ base14_test.go | 6 +++--- decoder.go | 20 ++++---------------- encoder.go | 9 +++------ 4 files changed, 16 insertions(+), 31 deletions(-) diff --git a/base14.go b/base14.go index 6c1ab0c..5956f10 100644 --- a/base14.go +++ b/base14.go @@ -44,7 +44,7 @@ func Encode(b []byte) (encd []byte) { return } -func EncodeTo(b, encd []byte) error { +func EncodeTo(b, encd []byte) (int, error) { outlen := len(b) / 7 * 8 offset := len(b) % 7 switch offset { //算上偏移标志字符占用的2字节 @@ -60,10 +60,10 @@ func EncodeTo(b, encd []byte) error { outlen += 10 } if len(encd) < outlen { - return errors.New("encd too small") + return 0, errors.New("encd too small") } encode(offset, outlen, b, encd) - return nil + return outlen, nil } //go:nosplit @@ -111,7 +111,7 @@ func Decode(b []byte) (decd []byte) { } //go:nosplit -func DecodeTo(b []byte, decd []byte) error { +func DecodeTo(b []byte, decd []byte) (int, error) { outlen := len(b) offset := 0 if b[len(b)-2] == '=' { @@ -131,8 +131,8 @@ func DecodeTo(b []byte, decd []byte) error { } outlen = outlen/8*7 + offset if len(decd) < outlen { - return errors.New("decd too small") + return 0, errors.New("decd too small") } decode(offset, outlen, b, decd) - return nil + return outlen, nil } diff --git a/base14_test.go b/base14_test.go index 44e37d6..291cb2a 100644 --- a/base14_test.go +++ b/base14_test.go @@ -121,7 +121,7 @@ func benchEncode(b *testing.B, data []byte) { b.SetBytes(int64(len(data))) b.ResetTimer() for i := 0; i < b.N; i++ { - _ = EncodeTo(data, buf) + _, _ = EncodeTo(data, buf) } } @@ -131,14 +131,14 @@ func benchDecode(b *testing.B, data []byte) { panic(err) } buf := make([]byte, EncodeLen(len(data))) - err = EncodeTo(data, buf) + _, err = EncodeTo(data, buf) if err != nil { panic(err) } b.SetBytes(int64(len(buf))) b.ResetTimer() for i := 0; i < b.N; i++ { - _ = DecodeTo(buf, data) + _, _ = DecodeTo(buf, data) } } diff --git a/decoder.go b/decoder.go index a0d678f..cb6eb0a 100644 --- a/decoder.go +++ b/decoder.go @@ -34,12 +34,7 @@ func (d *Decoder) Read(p []byte) (n int, err error) { inlen = i + n if err != nil { if inlen > 0 { - offset := 0 - if d.b[inlen-2] == '=' { - offset = int(d.b[inlen-1]) - } - n = DecodeLen(inlen, offset) - _ = DecodeTo(d.b[:inlen], p) + n, _ = DecodeTo(d.b[:inlen], p) d.b = nil d.r = nil } @@ -55,13 +50,11 @@ func (d *Decoder) Read(p []byte) (n int, err error) { offset = int(d.b[inlen-1]) } if offset > 0 { - n = DecodeLen(len(d.b[:inlen]), offset) - _ = DecodeTo(d.b[:inlen], p) + n, _ = DecodeTo(d.b[:inlen], p) d.b = nil d.r = nil } else { - n = DecodeLen(inlen, 0) - _ = DecodeTo(d.b[:inlen], p) + n, _ = DecodeTo(d.b[:inlen], p) d.b = d.b[:0] } return @@ -75,12 +68,7 @@ func (d *Decoder) Read(p []byte) (n int, err error) { if len(d.b[inlen:]) == 2 { inlen += 2 } - offset := 0 - if d.b[inlen-2] == '=' { - offset = int(d.b[inlen-1]) - } - n = DecodeLen(inlen, offset) - _ = DecodeTo(d.b[:inlen], p) + n, _ = DecodeTo(d.b[:inlen], p) d.b = d.b[inlen:] return } diff --git a/encoder.go b/encoder.go index b91cd53..715d389 100644 --- a/encoder.go +++ b/encoder.go @@ -31,22 +31,19 @@ func (e *Encoder) Read(p []byte) (n int, err error) { inlen = i + n if err != nil { if len(e.b) > 0 { - n = EncodeLen(inlen) - _ = EncodeTo(e.b[:inlen], p) + n, _ = EncodeTo(e.b[:inlen], p) } e.b = nil e.r = nil return } - n = EncodeLen(inlen) - err = EncodeTo(e.b[:inlen], p) + n, err = EncodeTo(e.b[:inlen], p) e.b = e.b[:0] return } else if inlen > len(e.b) { inlen = len(e.b) } - n = EncodeLen(inlen) - err = EncodeTo(e.b[:inlen], p) + n, err = EncodeTo(e.b[:inlen], p) e.b = e.b[inlen:] return }