aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bitreader.go33
-rw-r--r--bitreader_test.go14
2 files changed, 20 insertions, 27 deletions
diff --git a/bitreader.go b/bitreader.go
index 9d9a273..b105df7 100644
--- a/bitreader.go
+++ b/bitreader.go
@@ -8,31 +8,24 @@ import (
8) 8)
9 9
10type ReaderType struct { 10type ReaderType struct {
11 data []byte 11 data []byte // Reader data from a byte array
12 base int 12 base int // Current reader byte location
13 index int 13 index int // Current reader index
14 lsb bool 14 le bool // Little endian or big endian?
15} 15}
16 16
17func Reader(data []byte) *ReaderType { 17func Reader(data []byte, le bool) *ReaderType {
18 return &ReaderType{ 18 dataClone := data
19 data: data, 19 if le {
20 base: 0, 20 for index, byteValue := range data {
21 index: 0, 21 dataClone[index] = bits.Reverse8(byteValue)
22 lsb: false, 22 }
23 }
24}
25
26func ReaderLSB(data []byte) *ReaderType {
27 dataReversed := data
28 for index, byteValue := range data {
29 dataReversed[index] = bits.Reverse8(byteValue)
30 } 23 }
31 return &ReaderType{ 24 return &ReaderType{
32 data: dataReversed, 25 data: dataClone,
33 base: 0, 26 base: 0,
34 index: 0, 27 index: 0,
35 lsb: true, 28 le: le,
36 } 29 }
37} 30}
38 31
@@ -60,7 +53,7 @@ func (reader *ReaderType) ReadBits32(bits int) (int, error) {
60 if err != nil { 53 if err != nil {
61 return -1, err 54 return -1, err
62 } 55 }
63 if reader.lsb { 56 if reader.le {
64 var output string 57 var output string
65 // Go to last bit and read backwards from there 58 // Go to last bit and read backwards from there
66 reader.base += bits / 8 59 reader.base += bits / 8
diff --git a/bitreader_test.go b/bitreader_test.go
index c29a3bd..aed0930 100644
--- a/bitreader_test.go
+++ b/bitreader_test.go
@@ -8,7 +8,7 @@ import (
8var TestArray = [...]byte{113, 13, 0, 0, 162, 27, 0, 0, 204} 8var TestArray = [...]byte{113, 13, 0, 0, 162, 27, 0, 0, 204}
9 9
10func TestReadBit(t *testing.T) { 10func TestReadBit(t *testing.T) {
11 bitreader := Reader(TestArray[:]) 11 bitreader := Reader(TestArray[:], false)
12 expected := []bool{false, true, true, true} 12 expected := []bool{false, true, true, true}
13 for i := range expected { 13 for i := range expected {
14 value, err := bitreader.ReadBit() 14 value, err := bitreader.ReadBit()
@@ -21,8 +21,8 @@ func TestReadBit(t *testing.T) {
21 } 21 }
22} 22}
23 23
24func TestReadBitLSB(t *testing.T) { 24func TestReadBitLE(t *testing.T) {
25 bitreader := ReaderLSB(TestArray[:]) 25 bitreader := Reader(TestArray[:], true)
26 expected := []bool{true, false, false, false} 26 expected := []bool{true, false, false, false}
27 for i := range expected { 27 for i := range expected {
28 value, err := bitreader.ReadBit() 28 value, err := bitreader.ReadBit()
@@ -36,7 +36,7 @@ func TestReadBitLSB(t *testing.T) {
36} 36}
37 37
38func TestReadBits32(t *testing.T) { 38func TestReadBits32(t *testing.T) {
39 bitreader := Reader(TestArray[:]) 39 bitreader := Reader(TestArray[:], false)
40 expected := []int{3793354753, 2288779267} // 11100010000110100000000000000001, 10001000011011000000000000000011 40 expected := []int{3793354753, 2288779267} // 11100010000110100000000000000001, 10001000011011000000000000000011
41 expectedBool := []bool{false, false} 41 expectedBool := []bool{false, false}
42 for i := range expected { 42 for i := range expected {
@@ -58,7 +58,7 @@ func TestReadBits32(t *testing.T) {
58} 58}
59 59
60func TestReadBits32LSB(t *testing.T) { 60func TestReadBits32LSB(t *testing.T) {
61 bitreader := ReaderLSB(TestArray[:]) 61 bitreader := Reader(TestArray[:], true)
62 expected := []int{1720, 1768} // 11010111000, 11011101000 62 expected := []int{1720, 1768} // 11010111000, 11011101000
63 for i := range expected { 63 for i := range expected {
64 bitreader.ReadBit() 64 bitreader.ReadBit()
@@ -73,7 +73,7 @@ func TestReadBits32LSB(t *testing.T) {
73} 73}
74 74
75func TestSkipBits(t *testing.T) { 75func TestSkipBits(t *testing.T) {
76 bitreader := Reader(TestArray[:]) 76 bitreader := Reader(TestArray[:], false)
77 expected := []bool{true, true, false, true} //00001101 77 expected := []bool{true, true, false, true} //00001101
78 bitreader.SkipBits(12) 78 bitreader.SkipBits(12)
79 for i := range expected { 79 for i := range expected {
@@ -88,7 +88,7 @@ func TestSkipBits(t *testing.T) {
88} 88}
89 89
90func TestSkipBitsLSB(t *testing.T) { 90func TestSkipBitsLSB(t *testing.T) {
91 bitreader := ReaderLSB(TestArray[:]) 91 bitreader := Reader(TestArray[:], true)
92 expected := []bool{false, false, false, false} //10110000 92 expected := []bool{false, false, false, false} //10110000
93 bitreader.SkipBits(12) 93 bitreader.SkipBits(12)
94 for i := range expected { 94 for i := range expected {