Path: blob/main/crates/polars-arrow/src/bitmap/utils/fmt.rs
6939 views
use std::fmt::Write;12use super::is_set;34/// Formats `bytes` taking into account an offset and length of the form5pub fn fmt(6bytes: &[u8],7offset: usize,8length: usize,9f: &mut std::fmt::Formatter<'_>,10) -> std::fmt::Result {11assert!(offset < 8);1213write!(f, "Bitmap {{ len: {length}, offset: {offset}, bytes: [")?;14let mut remaining = length;15if remaining == 0 {16f.write_str("] }")?;17return Ok(());18}1920let first = bytes[0];21let bytes = &bytes[1..];22let empty_before = 8usize.saturating_sub(remaining + offset);23f.write_str("0b")?;24for _ in 0..empty_before {25f.write_char('_')?;26}27let until = std::cmp::min(8, offset + remaining);28for i in offset..until {29if is_set(first, offset + until - 1 - i) {30f.write_char('1')?;31} else {32f.write_char('0')?;33}34}35for _ in 0..offset {36f.write_char('_')?;37}38remaining -= until - offset;3940if remaining == 0 {41f.write_str("] }")?;42return Ok(());43}4445let number_of_bytes = remaining / 8;46for byte in &bytes[..number_of_bytes] {47f.write_str(", ")?;48f.write_fmt(format_args!("{byte:#010b}"))?;49}50remaining -= number_of_bytes * 8;51if remaining == 0 {52f.write_str("] }")?;53return Ok(());54}5556let last = bytes[std::cmp::min((length + offset).div_ceil(8), bytes.len() - 1)];57let remaining = (length + offset) % 8;58f.write_str(", ")?;59f.write_str("0b")?;60for _ in 0..(8 - remaining) {61f.write_char('_')?;62}63for i in 0..remaining {64if is_set(last, remaining - 1 - i) {65f.write_char('1')?;66} else {67f.write_char('0')?;68}69}70f.write_str("] }")71}727374