@@ -17,8 +17,8 @@ package indexing
1717import (
1818 "fmt"
1919 "io"
20- "strconv"
2120
21+ "github.com/go-air/pal/internal/plain"
2222 "github.com/go-air/pal/xtruth"
2323)
2424
@@ -30,15 +30,14 @@ func (c C) PlainEncode(w io.Writer) error {
3030 _ , err := fmt .Fprintf (w , "." )
3131 return err
3232 }
33- _ , err := w .Write (strconv .AppendInt (nil , * c .p , 16 ))
34- return err
35- }
36-
37- func isHexLower (b byte ) bool {
38- return (b >= byte ('0' ) && b <= byte ('9' )) || (b >= byte ('a' ) && b <= byte ('f' ))
33+ err := plain .Put (w , "c" )
34+ if err != nil {
35+ return err
36+ }
37+ return plain .EncodeInt64 (w , * c .p )
3938}
4039
41- func (c C ) PlainDecode (r io.Reader ) error {
40+ func (c * C ) PlainDecode (r io.Reader ) error {
4241 var buf [16 ]byte
4342 _ , err := io .ReadFull (r , buf [:1 ])
4443 if err != nil {
@@ -48,20 +47,15 @@ func (c C) PlainDecode(r io.Reader) error {
4847 c .p = nil
4948 return nil
5049 }
51- i := 1
52- for i < 16 {
53- _ , err = io .ReadFull (r , buf [i :i + 1 ])
54- if err != nil {
55- return err
56- }
57- if ! isHexLower (buf [i ]) {
58- break
59- }
60-
61- i ++
50+ if buf [0 ] != byte ('c' ) {
51+ return fmt .Errorf ("unexpected %c != c" , buf [0 ])
52+ }
53+ var v int64
54+ v , err = plain .DecodeInt64From (r )
55+ if err != nil {
56+ return err
6257 }
63- v , _ := strconv .ParseInt (string (buf [:i ]), 16 , 64 )
64- * c .p = v
58+ c .p = & v
6559 return nil
6660}
6761
@@ -74,36 +68,36 @@ var one int64 = 1
7468
7569func (c consts ) Zero () I {
7670 z := int64 (0 )
77- return I (C {& z })
71+ return I (& C {& z })
7872}
7973
8074func (c consts ) One () I {
8175 o := int64 (1 )
82- return I (C {& o })
76+ return I (& C {& o })
8377}
8478
8579func (c consts ) IsVar (v I ) bool {
86- return v .(C ).p == nil
80+ return v .(* C ).p == nil
8781}
8882
8983func (c consts ) Var () I {
90- return C {nil }
84+ return & C {nil }
9185}
9286
9387func (c consts ) FromInt64 (v int64 ) I {
94- return C {& v }
88+ return & C {& v }
9589}
9690
9791func (c consts ) ToInt64 (v I ) (int64 , bool ) {
98- p := v .(C ).p
92+ p := v .(* C ).p
9993 if p == nil {
10094 return 0 , false
10195 }
10296 return * p , true
10397}
10498
10599func (c consts ) Plus (a , b I ) I {
106- pa , pb := a .(C ).p , b .(C ).p
100+ pa , pb := a .(* C ).p , b .(* C ).p
107101 if pa == nil || pb == nil {
108102 return c .Var ()
109103 }
@@ -112,7 +106,7 @@ func (c consts) Plus(a, b I) I {
112106}
113107
114108func (c consts ) Times (a , b I ) I {
115- pa , pb := a .(C ).p , b .(C ).p
109+ pa , pb := a .(* C ).p , b .(* C ).p
116110 if pa == nil || pb == nil {
117111 return c .Var ()
118112 }
@@ -125,7 +119,7 @@ func (c consts) Div(a, b I) (I, xtruth.T) {
125119 case xtruth .True :
126120 return c .Zero (), xtruth .False
127121 case xtruth .False :
128- pa , pb := a .(C ).p , b .(C ).p
122+ pa , pb := a .(* C ).p , b .(* C ).p
129123 r := * pa / * pb
130124 return c .FromInt64 (r ), xtruth .True
131125 case xtruth .X :
@@ -139,7 +133,7 @@ func (c consts) Rem(a, b I) (I, xtruth.T) {
139133 case xtruth .True :
140134 return c .Zero (), xtruth .False
141135 case xtruth .False :
142- pa , pb := a .(C ).p , b .(C ).p
136+ pa , pb := a .(* C ).p , b .(* C ).p
143137 r := * pa % * pb
144138 return c .FromInt64 (r ), xtruth .True
145139 case xtruth .X :
@@ -149,7 +143,7 @@ func (c consts) Rem(a, b I) (I, xtruth.T) {
149143}
150144
151145func (c consts ) Band (a , b I ) I {
152- pa , pb := a .(C ).p , b .(C ).p
146+ pa , pb := a .(* C ).p , b .(* C ).p
153147 if pa == nil || pb == nil {
154148 return c .Var ()
155149 }
@@ -158,7 +152,7 @@ func (c consts) Band(a, b I) I {
158152}
159153
160154func (c consts ) Bnot (a I ) I {
161- pa := a .(C ).p
155+ pa := a .(* C ).p
162156 if pa == nil {
163157 return c .Var ()
164158 }
@@ -175,7 +169,7 @@ func (c consts) Rshift(a, s I) (I, xtruth.T) {
175169}
176170
177171func (c consts ) Less (a , b I ) xtruth.T {
178- pa , pb := a .(C ).p , b .(C ).p
172+ pa , pb := a .(* C ).p , b .(* C ).p
179173 if pa == nil || pb == nil {
180174 return xtruth .X
181175 }
@@ -186,7 +180,7 @@ func (c consts) Less(a, b I) xtruth.T {
186180}
187181
188182func (c consts ) Equal (a , b I ) xtruth.T {
189- pa , pb := a .(C ).p , b .(C ).p
183+ pa , pb := a .(* C ).p , b .(* C ).p
190184 if pa == nil || pb == nil {
191185 return xtruth .X
192186 }
0 commit comments