Ensure efficient conversion for base85 string API

This commit is contained in:
Kovid Goyal 2023-09-04 21:39:03 +05:30
parent 541c0cdde4
commit 34e5c7f8aa
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
2 changed files with 11 additions and 2 deletions

View File

@ -11,6 +11,8 @@ import (
"io" "io"
"strconv" "strconv"
"sync" "sync"
"kitty/tools/utils"
) )
// 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~ // 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!#$%&()*+-;<=>?@^_`{|}~
@ -148,13 +150,13 @@ func Encode(dst, src []byte) int {
func EncodeToString(src []byte) string { func EncodeToString(src []byte) string {
buf := make([]byte, EncodedLen(len(src))) buf := make([]byte, EncodedLen(len(src)))
Encode(buf, src) Encode(buf, src)
return string(buf) return utils.UnsafeBytesToString(buf)
} }
// DecodeString returns the bytes represented by the base85 string s. // DecodeString returns the bytes represented by the base85 string s.
func DecodeString(src string) ([]byte, error) { func DecodeString(src string) ([]byte, error) {
buf := make([]byte, DecodedLen(len(src))) buf := make([]byte, DecodedLen(len(src)))
_, err := Decode(buf, []byte(src)) _, err := Decode(buf, utils.UnsafeStringToBytes(src))
return buf, err return buf, err
} }

View File

@ -38,6 +38,13 @@ func TestBase85(t *testing.T) {
for _, p := range []pair{ for _, p := range []pair{
{"M", "O#"}, {"M", "O#"},
{"Manual", "O<`_zVQc"}, {"Manual", "O<`_zVQc"},
{
"Man is distinguished, not only by his reason, but by this singular passion from " +
"other animals, which is a lust of the mind, that by a perseverance of delight in " +
"the continued and indefatigable generation of knowledge, exceeds the short " +
"vehemence of any carnal pleasure.",
"O<`^zX>%ZCX>)XGZfA9Ab7*B`EFf-gbRchTY<VDJc_3(Mb0BhMVRLV8EFfZabRc4RAarPHb0BkRZfA9DVR9gFVRLh7Z*CxFa&K)QZ**v7av))DX>DO_b1WctXlY|;AZc?TVIXXEb95kYW*~HEWgu;7Ze%PVbZB98AYyqSVIXj2a&u*NWpZI|V`U(3W*}r`Y-wj`bRcPNAarPDAY*TCbZKsNWn>^>Ze$>7Ze(R<VRUI{VPb4$AZKN6WpZJ3X>V>IZ)PBCZf|#NWn^b%EFfigV`XJzb0BnRWgv5CZ*p`Xc4cT~ZDnp_Wgu^6AYpEKAY);2ZeeU7aBO8^b9HiME&",
},
} { } {
q := EncodeToString([]byte(p.src)) q := EncodeToString([]byte(p.src))
if diff := cmp.Diff(p.encoded, q); diff != "" { if diff := cmp.Diff(p.encoded, q); diff != "" {