feat(string): add stringx option
This commit is contained in:
parent
aed507fc9a
commit
56d69f63af
|
@ -21,4 +21,6 @@ type StringXInterface interface {
|
||||||
Reduce(int32) (string, error)
|
Reduce(int32) (string, error)
|
||||||
Setbit(int32, bool) UpdateLength
|
Setbit(int32, bool) UpdateLength
|
||||||
Getbit(int32) (bool, error)
|
Getbit(int32) (bool, error)
|
||||||
|
Getrange(start, end int32) (string, error)
|
||||||
|
GetLength() int
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
package stringx
|
package stringx
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"strconv"
|
||||||
|
|
||||||
"gitee.com/timedb/wheatCache/pkg/errorx"
|
"gitee.com/timedb/wheatCache/pkg/errorx"
|
||||||
"gitee.com/timedb/wheatCache/pkg/structure"
|
"gitee.com/timedb/wheatCache/pkg/structure"
|
||||||
"strconv"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
type StringSingle struct {
|
type StringSingle struct {
|
||||||
|
@ -17,7 +18,7 @@ func NewStringSingle() structure.StringXInterface {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StringSingle) SizeByte() int64 {
|
func (s *StringSingle) SizeByte() int64 {
|
||||||
return int64(s.val.GetLength())
|
return int64(s.val.GetSize())
|
||||||
}
|
}
|
||||||
|
|
||||||
// RollBack TODO 事务相关, V2 实现
|
// RollBack TODO 事务相关, V2 实现
|
||||||
|
@ -105,3 +106,15 @@ func (s *StringSingle) Getbit(offer int32) (bool, error) {
|
||||||
|
|
||||||
return b, err
|
return b, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *StringSingle) Getrange(start, end int32) (string, error) {
|
||||||
|
b, err := s.val.SliceByString(int(start), int(end))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(b), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *StringSingle) GetLength() int {
|
||||||
|
return s.val.GetLength()
|
||||||
|
}
|
||||||
|
|
|
@ -3,9 +3,10 @@ package structure
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/binary"
|
"encoding/binary"
|
||||||
"gitee.com/timedb/wheatCache/pkg/errorx"
|
|
||||||
"math"
|
"math"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
|
||||||
|
"gitee.com/timedb/wheatCache/pkg/errorx"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Value 提供一个基础的 动态类型
|
// Value 提供一个基础的 动态类型
|
||||||
|
@ -28,6 +29,10 @@ func (v *Value) GetLength() int {
|
||||||
return len(v.val)
|
return len(v.val)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Value) GetSize() int {
|
||||||
|
return v.length
|
||||||
|
}
|
||||||
|
|
||||||
func (v *Value) GetDynamicType() DynamicType {
|
func (v *Value) GetDynamicType() DynamicType {
|
||||||
return v.onType
|
return v.onType
|
||||||
}
|
}
|
||||||
|
@ -160,3 +165,17 @@ func (v *Value) GetByte(offset int) (bool, error) {
|
||||||
|
|
||||||
return false, errorx.New("the maximum length is exceeded")
|
return false, errorx.New("the maximum length is exceeded")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (v *Value) SliceByString(start, end int) ([]byte, error) {
|
||||||
|
if v.onType != DynamicString {
|
||||||
|
return nil, errorx.New("not is string")
|
||||||
|
}
|
||||||
|
if start > end {
|
||||||
|
return nil, errorx.New("the end cannot be greater than the beginning")
|
||||||
|
}
|
||||||
|
if end > v.length {
|
||||||
|
return nil, errorx.New("the maximum index is exceeded, max index: %d", v.length)
|
||||||
|
}
|
||||||
|
|
||||||
|
return v.val[start:end], nil
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue