Skip to content

Commit 56fc230

Browse files
committed
add uint128/uint256 api to edian
1 parent bbc945a commit 56fc230

File tree

1 file changed

+144
-3
lines changed

1 file changed

+144
-3
lines changed

pkg/encoding/binary/binary.cell

Lines changed: 144 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ type ByteOrder interface {
1111
Uint16([]byte) uint16
1212
Uint32([]byte) uint32
1313
Uint64([]byte) uint64
14+
Uint128([]byte) uint128
15+
Uint256([]byte) uint256
1416
PutUint16([]byte, uint16)
1517
PutUint32([]byte, uint32)
1618
PutUint64([]byte, uint64)
@@ -79,6 +81,63 @@ func (le littleEndian) Uint64(b []byte) uint64 {
7981
return ret
8082
}
8183

84+
func (le littleEndian) Uint128(b []byte) uint128 {
85+
ret := uint128(b[0])
86+
ret = ret | uint128(b[1])<<uint128(8)
87+
ret = ret | uint128(b[2])<<uint128(16)
88+
ret = ret | uint128(b[3])<<uint128(24)
89+
ret = ret | uint128(b[4])<<uint128(32)
90+
ret = ret | uint128(b[5])<<uint128(40)
91+
ret = ret | uint128(b[6])<<uint128(48)
92+
ret = ret | uint128(b[7])<<uint128(56)
93+
ret = ret | uint128(b[8])<<uint128(64)
94+
ret = ret | uint128(b[9])<<uint128(72)
95+
ret = ret | uint128(b[10])<<uint128(80)
96+
ret = ret | uint128(b[11])<<uint128(88)
97+
ret = ret | uint128(b[12])<<uint128(96)
98+
ret = ret | uint128(b[13])<<uint128(104)
99+
ret = ret | uint128(b[14])<<uint128(112)
100+
ret = ret | uint128(b[15])<<uint128(120)
101+
return ret
102+
}
103+
104+
105+
func (le littleEndian) Uint256(b []byte) uint256 {
106+
ret := uint256(b[0])
107+
ret = ret | uint256(b[1])<<uint256(8)
108+
ret = ret | uint256(b[2])<<uint256(16)
109+
ret = ret | uint256(b[3])<<uint256(24)
110+
ret = ret | uint256(b[4])<<uint256(32)
111+
ret = ret | uint256(b[5])<<uint256(40)
112+
ret = ret | uint256(b[6])<<uint256(48)
113+
ret = ret | uint256(b[7])<<uint256(56)
114+
ret = ret | uint256(b[8])<<uint256(64)
115+
ret = ret | uint256(b[9])<<uint256(72)
116+
ret = ret | uint256(b[10])<<uint256(80)
117+
ret = ret | uint256(b[11])<<uint256(88)
118+
ret = ret | uint256(b[12])<<uint256(96)
119+
ret = ret | uint256(b[13])<<uint256(104)
120+
ret = ret | uint256(b[14])<<uint256(112)
121+
ret = ret | uint256(b[15])<<uint256(120)
122+
ret = ret | uint256(b[16])<<uint256(128)
123+
ret = ret | uint256(b[17])<<uint256(136)
124+
ret = ret | uint256(b[18])<<uint256(144)
125+
ret = ret | uint256(b[19])<<uint256(152)
126+
ret = ret | uint256(b[20])<<uint256(160)
127+
ret = ret | uint256(b[21])<<uint256(168)
128+
ret = ret | uint256(b[22])<<uint256(176)
129+
ret = ret | uint256(b[23])<<uint256(184)
130+
ret = ret | uint256(b[24])<<uint256(192)
131+
ret = ret | uint256(b[25])<<uint256(200)
132+
ret = ret | uint256(b[26])<<uint256(208)
133+
ret = ret | uint256(b[27])<<uint256(216)
134+
ret = ret | uint256(b[28])<<uint256(224)
135+
ret = ret | uint256(b[29])<<uint256(232)
136+
ret = ret | uint256(b[30])<<uint256(240)
137+
ret = ret | uint256(b[31])<<uint256(248)
138+
return ret
139+
}
140+
82141
func (le littleEndian) PutUint64(b []byte, v uint64) {
83142
b[0] = byte(v)
84143
b[1] = byte(v >> uint64(8))
@@ -159,6 +218,63 @@ func (be bigEndian) Uint64(b []byte) uint64 {
159218
return ret
160219
}
161220

221+
func (be bigEndian) Uint128(b []byte) uint128 {
222+
ret := uint128(b[15])
223+
ret = ret | uint128(b[14])<<uint128(8)
224+
ret = ret | uint128(b[13])<<uint128(16)
225+
ret = ret | uint128(b[12])<<uint128(24)
226+
ret = ret | uint128(b[11])<<uint128(32)
227+
ret = ret | uint128(b[10])<<uint128(40)
228+
ret = ret | uint128(b[9])<<uint128(48)
229+
ret = ret | uint128(b[8])<<uint128(56)
230+
ret = ret | uint128(b[7])<<uint128(64)
231+
ret = ret | uint128(b[6])<<uint128(72)
232+
ret = ret | uint128(b[5])<<uint128(80)
233+
ret = ret | uint128(b[4])<<uint128(88)
234+
ret = ret | uint128(b[3])<<uint128(96)
235+
ret = ret | uint128(b[2])<<uint128(104)
236+
ret = ret | uint128(b[1])<<uint128(112)
237+
ret = ret | uint128(b[0])<<uint128(120)
238+
return ret
239+
}
240+
241+
242+
func (be bigEndian) Uint256(b []byte) uint256 {
243+
ret := uint256(b[31])
244+
ret = ret | uint256(b[30])<<uint256(8)
245+
ret = ret | uint256(b[29])<<uint256(16)
246+
ret = ret | uint256(b[28])<<uint256(24)
247+
ret = ret | uint256(b[27])<<uint256(32)
248+
ret = ret | uint256(b[26])<<uint256(40)
249+
ret = ret | uint256(b[25])<<uint256(48)
250+
ret = ret | uint256(b[24])<<uint256(56)
251+
ret = ret | uint256(b[23])<<uint256(64)
252+
ret = ret | uint256(b[22])<<uint256(72)
253+
ret = ret | uint256(b[21])<<uint256(80)
254+
ret = ret | uint256(b[20])<<uint256(88)
255+
ret = ret | uint256(b[19])<<uint256(96)
256+
ret = ret | uint256(b[18])<<uint256(104)
257+
ret = ret | uint256(b[17])<<uint256(112)
258+
ret = ret | uint256(b[16])<<uint256(120)
259+
ret = ret | uint256(b[15])<<uint256(128)
260+
ret = ret | uint256(b[14])<<uint256(136)
261+
ret = ret | uint256(b[13])<<uint256(144)
262+
ret = ret | uint256(b[12])<<uint256(152)
263+
ret = ret | uint256(b[11])<<uint256(160)
264+
ret = ret | uint256(b[10])<<uint256(168)
265+
ret = ret | uint256(b[9])<<uint256(176)
266+
ret = ret | uint256(b[8])<<uint256(184)
267+
ret = ret | uint256(b[7])<<uint256(192)
268+
ret = ret | uint256(b[6])<<uint256(200)
269+
ret = ret | uint256(b[5])<<uint256(208)
270+
ret = ret | uint256(b[4])<<uint256(216)
271+
ret = ret | uint256(b[3])<<uint256(224)
272+
ret = ret | uint256(b[2])<<uint256(232)
273+
ret = ret | uint256(b[1])<<uint256(240)
274+
ret = ret | uint256(b[0])<<uint256(248)
275+
return ret
276+
}
277+
162278
func (be bigEndian) PutUint64(b []byte, v uint64) {
163279
b[0] = byte(v >> uint64(56))
164280
b[1] = byte(v >> uint64(48))
@@ -213,9 +329,6 @@ func ReadUint32(r io.Reader, order ByteOrder) uint32 {
213329

214330
func ReadUint64(r io.Reader, order ByteOrder) uint64 {
215331
bs := make([]byte, 8)
216-
for i, v := range bs {
217-
debug.Printf("bs i %x", v)
218-
}
219332
n, err := io.ReadFull(r, bs)
220333
if err.NotNone() {
221334
return 0
@@ -227,3 +340,31 @@ func ReadUint64FromSlice(slice []byte, order ByteOrder) uint64 {
227340
buffer := bytes.NewBuffer(slice)
228341
return ReadUint64(buffer, order)
229342
}
343+
344+
func ReadUint128(r io.Reader, order ByteOrder) uint128 {
345+
bs := make([]byte, 16)
346+
n, err := io.ReadFull(r, bs)
347+
if err.NotNone() {
348+
return uint128(0)
349+
}
350+
return order.Uint128(bs)
351+
}
352+
353+
func ReadUint128FromSlice(slice []byte, order ByteOrder) uint128 {
354+
buffer := bytes.NewBuffer(slice)
355+
return ReadUint128(buffer, order)
356+
}
357+
358+
func ReadUint256(r io.Reader, order ByteOrder) uint256 {
359+
bs := make([]byte, 32)
360+
n, err := io.ReadFull(r, bs)
361+
if err.NotNone() {
362+
return uint256(0)
363+
}
364+
return order.Uint256(bs)
365+
}
366+
367+
func ReadUint256FromSlice(slice []byte, order ByteOrder) uint256 {
368+
buffer := bytes.NewBuffer(slice)
369+
return ReadUint256(buffer, order)
370+
}

0 commit comments

Comments
 (0)