diff options
Diffstat (limited to 'bitreader.go')
| -rw-r--r-- | bitreader.go | 26 |
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 | ||
| 45 | func (reader *ReaderType) ReadBits32(bits int) (int, error) { | 49 | func (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 | |||
| 57 | func (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 | ||
| 108 | func (reader *ReaderType) ReadBit() (bool, error) { | 120 | func (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) { | |||
| 116 | func (reader *ReaderType) checkAvailableBits(bits int) error { | 128 | func (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 | } |