language change
This commit is contained in:
53
language-change/excel-language/utils.go
Normal file
53
language-change/excel-language/utils.go
Normal file
@@ -0,0 +1,53 @@
|
||||
package excelLanguage
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/binary"
|
||||
"io"
|
||||
)
|
||||
|
||||
func writeI8Varint(buf *bytes.Buffer, v int8) error {
|
||||
uv := uint64((uint32(v) << 1) ^ uint32(v>>7)) // zigzag encode
|
||||
b := make([]byte, binary.MaxVarintLen64)
|
||||
n := binary.PutUvarint(b, uv)
|
||||
_, err := buf.Write(b[:n])
|
||||
return err
|
||||
}
|
||||
|
||||
func readI8Varint(r *bytes.Reader) (int, error) {
|
||||
uv, err := binary.ReadUvarint(r)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
// zigzag decode
|
||||
v := int((uv >> 1) ^ uint64((int64(uv&1)<<63)>>63))
|
||||
return v, nil
|
||||
}
|
||||
|
||||
func readString(r *bytes.Reader) (string, error) {
|
||||
l, err := r.ReadByte()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
buf := make([]byte, l)
|
||||
if _, err := io.ReadFull(r, buf); err != nil {
|
||||
return "", err
|
||||
}
|
||||
return string(buf), nil
|
||||
}
|
||||
|
||||
func readStringArray(r *bytes.Reader) ([]string, error) {
|
||||
length, err := readI8Varint(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
arr := make([]string, 0, length)
|
||||
for i := 0; i < length; i++ {
|
||||
s, err := readString(r)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
arr = append(arr, s)
|
||||
}
|
||||
return arr, nil
|
||||
}
|
||||
Reference in New Issue
Block a user