@@ -19,14 +19,14 @@ fn BitReader::refill(self : BitReader) -> Unit {
1919 // Fast path: load 8 bytes at once into an empty buffer
2020 let d = self.data
2121 let p = self.byte_pos
22- self.bits = d[p] .to_uint().to_uint64() |
23- (d[ p + 1] .to_uint().to_uint64() << 8) |
24- (d[ p + 2] .to_uint().to_uint64() << 16) |
25- (d[ p + 3] .to_uint().to_uint64() << 24) |
26- (d[ p + 4] .to_uint().to_uint64() << 32) |
27- (d[ p + 5] .to_uint().to_uint64() << 40) |
28- (d[ p + 6] .to_uint().to_uint64() << 48) |
29- (d[ p + 7] .to_uint().to_uint64() << 56)
22+ self.bits = d.unsafe_get(p) .to_uint().to_uint64() |
23+ (d.unsafe_get( p + 1) .to_uint().to_uint64() << 8) |
24+ (d.unsafe_get( p + 2) .to_uint().to_uint64() << 16) |
25+ (d.unsafe_get( p + 3) .to_uint().to_uint64() << 24) |
26+ (d.unsafe_get( p + 4) .to_uint().to_uint64() << 32) |
27+ (d.unsafe_get( p + 5) .to_uint().to_uint64() << 40) |
28+ (d.unsafe_get( p + 6) .to_uint().to_uint64() << 48) |
29+ (d.unsafe_get( p + 7) .to_uint().to_uint64() << 56)
3030 self.byte_pos += 8
3131 self.n_bits = 64
3232 } else if remaining >= 7 && self.n_bits <= 8 {
@@ -35,19 +35,19 @@ fn BitReader::refill(self : BitReader) -> Unit {
3535 let p = self.byte_pos
3636 let n = self.n_bits
3737 self.bits = self.bits |
38- (d[p] .to_uint().to_uint64() << n) |
39- (d[ p + 1] .to_uint().to_uint64() << (n + 8)) |
40- (d[ p + 2] .to_uint().to_uint64() << (n + 16)) |
41- (d[ p + 3] .to_uint().to_uint64() << (n + 24)) |
42- (d[ p + 4] .to_uint().to_uint64() << (n + 32)) |
43- (d[ p + 5] .to_uint().to_uint64() << (n + 40)) |
44- (d[ p + 6] .to_uint().to_uint64() << (n + 48))
38+ (d.unsafe_get(p) .to_uint().to_uint64() << n) |
39+ (d.unsafe_get( p + 1) .to_uint().to_uint64() << (n + 8)) |
40+ (d.unsafe_get( p + 2) .to_uint().to_uint64() << (n + 16)) |
41+ (d.unsafe_get( p + 3) .to_uint().to_uint64() << (n + 24)) |
42+ (d.unsafe_get( p + 4) .to_uint().to_uint64() << (n + 32)) |
43+ (d.unsafe_get( p + 5) .to_uint().to_uint64() << (n + 40)) |
44+ (d.unsafe_get( p + 6) .to_uint().to_uint64() << (n + 48))
4545 self.byte_pos += 7
4646 self.n_bits += 56
4747 } else {
4848 while self.n_bits <= 56 && self.byte_pos < self.data.length() {
4949 self.bits = self.bits |
50- (self.data[ self.byte_pos] .to_uint().to_uint64() << self.n_bits)
50+ (self.data.unsafe_get( self.byte_pos) .to_uint().to_uint64() << self.n_bits)
5151 self.byte_pos += 1
5252 self.n_bits += 8
5353 }
@@ -157,7 +157,7 @@ fn BitWriter::flush(self : BitWriter) -> Unit {
157157 // At most 8 bytes can be flushed (64 bits / 8)
158158 self.ensure_capacity(8)
159159 while self.n_bits >= 8 {
160- self.buf[ self.pos] = (self.bits & 0xFFUL ).to_uint().to_byte()
160+ self.buf.unsafe_set( self.pos, (self.bits & 0xFFUL ).to_uint().to_byte() )
161161 self.pos += 1
162162 self.bits = self.bits >> 8
163163 self.n_bits -= 8
@@ -168,7 +168,7 @@ fn BitWriter::flush(self : BitWriter) -> Unit {
168168fn BitWriter ::flush_final(self : BitWriter ) -> Unit {
169169 if self.n_bits > 0 {
170170 self.ensure_capacity(1)
171- self.buf[ self.pos] = (self.bits & 0xFFUL ).to_uint().to_byte()
171+ self.buf.unsafe_set( self.pos, (self.bits & 0xFFUL ).to_uint().to_byte() )
172172 self.pos += 1
173173 self.bits = 0UL
174174 self.n_bits = 0
0 commit comments