aboutsummaryrefslogtreecommitdiff
path: root/bitreader.go
diff options
context:
space:
mode:
Diffstat (limited to 'bitreader.go')
-rw-r--r--bitreader.go26
1 files changed, 19 insertions, 7 deletions
diff --git a/bitreader.go b/bitreader.go
index b105df7..635776b 100644
--- a/bitreader.go
+++ b/bitreader.go
@@ -33,6 +33,10 @@ func (reader *ReaderType) SkipBits(bits int) error {
33 if bits <= 0 { 33 if bits <= 0 {
34 return fmt.Errorf("SkipBits Error: Bits value %d lower or equals than 0.", bits) 34 return fmt.Errorf("SkipBits Error: Bits value %d lower or equals than 0.", bits)
35 } 35 }
36 err := reader.checkAvailableBits(bits)
37 if err != nil {
38 return err
39 }
36 for reader.index+bits > 7 { 40 for reader.index+bits > 7 {
37 reader.base++ 41 reader.base++
38 reader.index = 0 42 reader.index = 0
@@ -42,12 +46,20 @@ func (reader *ReaderType) SkipBits(bits int) error {
42 return nil 46 return nil
43} 47}
44 48
45func (reader *ReaderType) ReadBits32(bits int) (int, error) { 49func (reader *ReaderType) SkipBytes(bytes int) error {
50 err := reader.SkipBits(bytes * 8)
51 if err != nil {
52 return err
53 }
54 return nil
55}
56
57func (reader *ReaderType) ReadBits(bits int) (int, error) {
46 if bits <= 0 { 58 if bits <= 0 {
47 return -1, fmt.Errorf("ReadBits Error: Bits value %d lower or equals than 0.", bits) 59 return -1, fmt.Errorf("ReadBits Error: Bits value %d lower or equals than 0.", bits)
48 } 60 }
49 if bits > 32 { 61 if bits > 64 {
50 return -1, fmt.Errorf("ReadBits Error: Bits value %d higher than 32.", bits) 62 return -1, fmt.Errorf("ReadBits Error: Bits value %d higher than 64.", bits)
51 } 63 }
52 err := reader.checkAvailableBits(bits) 64 err := reader.checkAvailableBits(bits)
53 if err != nil { 65 if err != nil {
@@ -79,7 +91,7 @@ func (reader *ReaderType) ReadBits32(bits int) (int, error) {
79 reader.index -= 8 91 reader.index -= 8
80 } 92 }
81 // Conversion of string binary to int 93 // Conversion of string binary to int
82 value, err := strconv.ParseUint(output, 2, 32) 94 value, err := strconv.ParseUint(output, 2, 64)
83 if err != nil { 95 if err != nil {
84 return -1, fmt.Errorf("%s", err) 96 return -1, fmt.Errorf("%s", err)
85 } 97 }
@@ -97,7 +109,7 @@ func (reader *ReaderType) ReadBits32(bits int) (int, error) {
97 } 109 }
98 } 110 }
99 // Conversion of string binary to int 111 // Conversion of string binary to int
100 value, err := strconv.ParseUint(output, 2, 32) 112 value, err := strconv.ParseUint(output, 2, 64)
101 if err != nil { 113 if err != nil {
102 return -1, fmt.Errorf("%s", err) 114 return -1, fmt.Errorf("%s", err)
103 } 115 }
@@ -106,7 +118,7 @@ func (reader *ReaderType) ReadBits32(bits int) (int, error) {
106} 118}
107 119
108func (reader *ReaderType) ReadBit() (bool, error) { 120func (reader *ReaderType) ReadBit() (bool, error) {
109 value, err := reader.ReadBits32(1) 121 value, err := reader.ReadBits(1)
110 if err != nil { 122 if err != nil {
111 return false, fmt.Errorf("ReadBit Error: %s", err) 123 return false, fmt.Errorf("ReadBit Error: %s", err)
112 } 124 }
@@ -116,7 +128,7 @@ func (reader *ReaderType) ReadBit() (bool, error) {
116func (reader *ReaderType) checkAvailableBits(bits int) error { 128func (reader *ReaderType) checkAvailableBits(bits int) error {
117 availableBits := (len(reader.data)-reader.base)*8 - reader.index 129 availableBits := (len(reader.data)-reader.base)*8 - reader.index
118 if availableBits < bits { 130 if availableBits < bits {
119 return fmt.Errorf("BitReaderOutOfBounds: Wanted to read %d bit(s) but only %d bit(s) is/are available.", bits, availableBits) 131 return fmt.Errorf("BitReaderOutOfBounds: Wanted to read/skip %d bit(s) but only %d bit(s) is/are available.", bits, availableBits)
120 } 132 }
121 return nil 133 return nil
122} 134}