first commit
This commit is contained in:
		
							
								
								
									
										5
									
								
								utils/bits/pio/pio.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								utils/bits/pio/pio.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | ||||
|  | ||||
| package pio | ||||
|  | ||||
| var RecommendBufioSize = 1024*64 | ||||
|  | ||||
							
								
								
									
										91
									
								
								utils/bits/pio/reader.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								utils/bits/pio/reader.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,91 @@ | ||||
|  | ||||
| package pio | ||||
|  | ||||
| func U8(b []byte) (i uint8) { | ||||
| 	return b[0] | ||||
| } | ||||
|  | ||||
| func U16BE(b []byte) (i uint16) { | ||||
| 	i = uint16(b[0]) | ||||
| 	i <<= 8; i |= uint16(b[1]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func I16BE(b []byte) (i int16) { | ||||
| 	i = int16(b[0]) | ||||
| 	i <<= 8; i |= int16(b[1]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func I24BE(b []byte) (i int32) { | ||||
| 	i = int32(int8(b[0])) | ||||
| 	i <<= 8; i |= int32(b[1]) | ||||
| 	i <<= 8; i |= int32(b[2]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func U24BE(b []byte) (i uint32) { | ||||
| 	i = uint32(b[0]) | ||||
| 	i <<= 8; i |= uint32(b[1]) | ||||
| 	i <<= 8; i |= uint32(b[2]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func I32BE(b []byte) (i int32) { | ||||
| 	i = int32(int8(b[0])) | ||||
| 	i <<= 8; i |= int32(b[1]) | ||||
| 	i <<= 8; i |= int32(b[2]) | ||||
| 	i <<= 8; i |= int32(b[3]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func U32LE(b []byte) (i uint32) { | ||||
| 	i = uint32(b[3]) | ||||
| 	i <<= 8; i |= uint32(b[2]) | ||||
| 	i <<= 8; i |= uint32(b[1]) | ||||
| 	i <<= 8; i |= uint32(b[0]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func U32BE(b []byte) (i uint32) { | ||||
| 	i = uint32(b[0]) | ||||
| 	i <<= 8; i |= uint32(b[1]) | ||||
| 	i <<= 8; i |= uint32(b[2]) | ||||
| 	i <<= 8; i |= uint32(b[3]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func U40BE(b []byte) (i uint64) { | ||||
| 	i = uint64(b[0]) | ||||
| 	i <<= 8; i |= uint64(b[1]) | ||||
| 	i <<= 8; i |= uint64(b[2]) | ||||
| 	i <<= 8; i |= uint64(b[3]) | ||||
| 	i <<= 8; i |= uint64(b[4]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func U64BE(b []byte) (i uint64) { | ||||
| 	i = uint64(b[0]) | ||||
| 	i <<= 8; i |= uint64(b[1]) | ||||
| 	i <<= 8; i |= uint64(b[2]) | ||||
| 	i <<= 8; i |= uint64(b[3]) | ||||
| 	i <<= 8; i |= uint64(b[4]) | ||||
| 	i <<= 8; i |= uint64(b[5]) | ||||
| 	i <<= 8; i |= uint64(b[6]) | ||||
| 	i <<= 8; i |= uint64(b[7]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func I64BE(b []byte) (i int64) { | ||||
| 	i = int64(int8(b[0])) | ||||
| 	i <<= 8; i |= int64(b[1]) | ||||
| 	i <<= 8; i |= int64(b[2]) | ||||
| 	i <<= 8; i |= int64(b[3]) | ||||
| 	i <<= 8; i |= int64(b[4]) | ||||
| 	i <<= 8; i |= int64(b[5]) | ||||
| 	i <<= 8; i |= int64(b[6]) | ||||
| 	i <<= 8; i |= int64(b[7]) | ||||
| 	return | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										69
									
								
								utils/bits/pio/vec.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								utils/bits/pio/vec.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,69 @@ | ||||
| package pio | ||||
|  | ||||
| func VecLen(vec [][]byte) (n int) { | ||||
| 	for _, b := range vec { | ||||
| 		n += len(b) | ||||
| 	} | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func VecSliceTo(in [][]byte, out [][]byte, s int, e int) (n int) { | ||||
| 	if s < 0 { | ||||
| 		s = 0 | ||||
| 	} | ||||
|  | ||||
| 	if e >= 0 && e < s { | ||||
| 		panic("pio: VecSlice start > end") | ||||
| 	} | ||||
|  | ||||
| 	i := 0 | ||||
| 	off := 0 | ||||
| 	for s > 0 && i < len(in) { | ||||
| 		left := len(in[i]) | ||||
| 		read := s | ||||
| 		if left < read { | ||||
| 			read = left | ||||
| 		} | ||||
| 		left -= read | ||||
| 		off += read | ||||
| 		s -= read | ||||
| 		e -= read | ||||
| 		if left == 0 { | ||||
| 			i++ | ||||
| 			off = 0 | ||||
| 		} | ||||
| 	} | ||||
| 	if s > 0 { | ||||
| 		panic("pio: VecSlice start out of range") | ||||
| 	} | ||||
|  | ||||
| 	for e != 0 && i < len(in) { | ||||
| 		left := len(in[i])-off | ||||
| 		read := left | ||||
| 		if e > 0 && e < read { | ||||
| 			read = e | ||||
| 		} | ||||
| 		out[n] = in[i][off:off+read] | ||||
| 		n++ | ||||
| 		left -= read | ||||
| 		e -= read | ||||
| 		off += read | ||||
| 		if left == 0 { | ||||
| 			i++ | ||||
| 			off = 0 | ||||
| 		} | ||||
| 	} | ||||
| 	if e > 0 { | ||||
| 		panic("pio: VecSlice end out of range") | ||||
| 	} | ||||
|  | ||||
| 	return | ||||
| } | ||||
|  | ||||
| func VecSlice(in [][]byte, s int, e int) (out [][]byte) { | ||||
| 	out = make([][]byte, len(in)) | ||||
| 	n := VecSliceTo(in, out, s, e) | ||||
| 	out = out[:n] | ||||
| 	return | ||||
| } | ||||
|  | ||||
							
								
								
									
										22
									
								
								utils/bits/pio/vec_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								utils/bits/pio/vec_test.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,22 @@ | ||||
|  | ||||
| package pio | ||||
|  | ||||
| import ( | ||||
| 	"fmt" | ||||
| ) | ||||
|  | ||||
| func ExampleVec() { | ||||
| 	vec := [][]byte{[]byte{1,2,3}, []byte{4,5,6,7,8,9}, []byte{10,11,12,13}} | ||||
| 	println(VecLen(vec)) | ||||
|  | ||||
| 	vec = VecSlice(vec, 1, -1) | ||||
| 	fmt.Println(vec) | ||||
|  | ||||
| 	vec = VecSlice(vec, 2, -1) | ||||
| 	fmt.Println(vec) | ||||
|  | ||||
| 	vec = VecSlice(vec, 8, 8) | ||||
| 	fmt.Println(vec) | ||||
|  | ||||
| 	// Output: | ||||
| } | ||||
							
								
								
									
										89
									
								
								utils/bits/pio/writer.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								utils/bits/pio/writer.go
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,89 @@ | ||||
|  | ||||
| package pio | ||||
|  | ||||
| func PutU8(b []byte, v uint8) { | ||||
| 	b[0] = v | ||||
| } | ||||
|  | ||||
| func PutI16BE(b []byte, v int16) { | ||||
| 	b[0] = byte(v>>8) | ||||
| 	b[1] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU16BE(b []byte, v uint16) { | ||||
| 	b[0] = byte(v>>8) | ||||
| 	b[1] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutI24BE(b []byte, v int32) { | ||||
| 	b[0] = byte(v>>16) | ||||
| 	b[1] = byte(v>>8) | ||||
| 	b[2] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU24BE(b []byte, v uint32) { | ||||
| 	b[0] = byte(v>>16) | ||||
| 	b[1] = byte(v>>8) | ||||
| 	b[2] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutI32BE(b []byte, v int32) { | ||||
| 	b[0] = byte(v>>24) | ||||
| 	b[1] = byte(v>>16) | ||||
| 	b[2] = byte(v>>8) | ||||
| 	b[3] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU32BE(b []byte, v uint32) { | ||||
| 	b[0] = byte(v>>24) | ||||
| 	b[1] = byte(v>>16) | ||||
| 	b[2] = byte(v>>8) | ||||
| 	b[3] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU32LE(b []byte, v uint32) { | ||||
| 	b[3] = byte(v>>24) | ||||
| 	b[2] = byte(v>>16) | ||||
| 	b[1] = byte(v>>8) | ||||
| 	b[0] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU40BE(b []byte, v uint64) { | ||||
| 	b[0] = byte(v>>32) | ||||
| 	b[1] = byte(v>>24) | ||||
| 	b[2] = byte(v>>16) | ||||
| 	b[3] = byte(v>>8) | ||||
| 	b[4] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU48BE(b []byte, v uint64) { | ||||
| 	b[0] = byte(v>>40) | ||||
| 	b[1] = byte(v>>32) | ||||
| 	b[2] = byte(v>>24) | ||||
| 	b[3] = byte(v>>16) | ||||
| 	b[4] = byte(v>>8) | ||||
| 	b[5] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutU64BE(b []byte, v uint64) { | ||||
| 	b[0] = byte(v>>56) | ||||
| 	b[1] = byte(v>>48) | ||||
| 	b[2] = byte(v>>40) | ||||
| 	b[3] = byte(v>>32) | ||||
| 	b[4] = byte(v>>24) | ||||
| 	b[5] = byte(v>>16) | ||||
| 	b[6] = byte(v>>8) | ||||
| 	b[7] = byte(v) | ||||
| } | ||||
|  | ||||
| func PutI64BE(b []byte, v int64) { | ||||
| 	b[0] = byte(v>>56) | ||||
| 	b[1] = byte(v>>48) | ||||
| 	b[2] = byte(v>>40) | ||||
| 	b[3] = byte(v>>32) | ||||
| 	b[4] = byte(v>>24) | ||||
| 	b[5] = byte(v>>16) | ||||
| 	b[6] = byte(v>>8) | ||||
| 	b[7] = byte(v) | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Andrey Semochkin
					Andrey Semochkin