Skip to content

Commit c41345b

Browse files
committed
pointer chasing
Signed-off-by: Alexander Droste <[email protected]>
1 parent 6e4606d commit c41345b

File tree

1 file changed

+12
-13
lines changed

1 file changed

+12
-13
lines changed

vortex-buffer/src/bit/buf.rs

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -426,48 +426,47 @@ impl BitBuffer {
426426
return;
427427
}
428428

429-
let buffer_ptr = self.buffer.as_ptr();
429+
let is_bit_set = |byte: u8, bit_idx: usize| (byte & (1 << bit_idx)) != 0;
430+
431+
let mut buffer_ptr = self.buffer.as_ptr();
430432
let offset = self.offset;
431-
let mut current_byte = offset / 8;
432433
let start_bit_in_byte = offset % 8;
433434
let mut bit_pos = 0;
434435

435436
// Handle incomplete first byte.
436437
if start_bit_in_byte > 0 {
437438
let bits_in_first_byte = (8 - start_bit_in_byte).min(total_bits);
438-
let byte = unsafe { *buffer_ptr.add(current_byte) };
439+
buffer_ptr = unsafe { buffer_ptr.add(offset / 8) };
440+
let byte = unsafe { *buffer_ptr };
439441

440442
for bit_idx in 0..bits_in_first_byte {
441-
let is_set = (byte & (1 << (start_bit_in_byte + bit_idx))) != 0;
442-
f(bit_pos, is_set);
443+
f(bit_pos, is_bit_set(byte, start_bit_in_byte + bit_idx));
443444
}
444445

445446
bit_pos += bits_in_first_byte;
446-
current_byte += 1;
447+
buffer_ptr = unsafe { buffer_ptr.add(1) };
447448
}
448449

449450
let complete_bytes = (total_bits - bit_pos) / 8;
450451

451452
// Process complete bytes.
452453
for byte_idx in 0..complete_bytes {
453-
let byte = unsafe { *buffer_ptr.add(current_byte + byte_idx) };
454+
let byte = unsafe { *buffer_ptr };
454455

455456
for bit_idx in 0..8 {
456-
let is_set = (byte & (1 << bit_idx)) != 0;
457-
f(bit_pos + byte_idx * 8 + bit_idx, is_set);
457+
f(bit_pos + byte_idx * 8 + bit_idx, is_bit_set(byte, bit_idx));
458458
}
459+
buffer_ptr = unsafe { buffer_ptr.add(1) };
459460
}
460461
bit_pos += complete_bytes * 8;
461-
current_byte += complete_bytes;
462462

463463
// Handle remaining bits at the end.
464464
let remaining_bits = (total_bits - bit_pos) % 8;
465465
if remaining_bits > 0 {
466-
let byte = unsafe { *buffer_ptr.add(current_byte) };
466+
let byte = unsafe { *buffer_ptr };
467467

468468
for bit_idx in 0..remaining_bits {
469-
let is_set = (byte & (1 << bit_idx)) != 0;
470-
f(bit_pos + bit_idx, is_set);
469+
f(bit_pos + bit_idx, is_bit_set(byte, bit_idx));
471470
}
472471
}
473472
}

0 commit comments

Comments
 (0)