semx_bitops 0.1.61

位操作原语与动态大小位图
Documentation

semx_bitops

crates.io docs.rs

位操作原语与动态大小位图,对标 Linux 内核 <linux/bitops.h> + <linux/bitmap.h>

#![no_std],依赖 alloc(仅 BitMap),可在裸机 / 嵌入式 / 内核场景直接使用。

功能

  • 位操作原语set_bitclear_bittest_bitfind_first_bitfind_next_zero_bit 等,操作 &[usize] 切片
  • 位域提取与插入extract8/16/32/64deposit32/64
  • 位交错half_shuffle32/64half_unshuffle32/64
  • 动态位图 BitMap — 基于 Vec<usize> 的变长位图,支持集合运算、区间操作、连续空闲区域查找

用法

位操作原语

use semx_bitops::{set_bit, test_bit, find_first_bit};

let mut bits = [0usize; 2];
set_bit(65, &mut bits);
assert!(test_bit(65, &bits));
assert_eq!(find_first_bit(&bits, 128), 65);

位域操作

use semx_bitops::{extract32, deposit32};

let val = 0x8000_008Eu32;
assert_eq!(extract32(val, 1, 3), 7);

let val = deposit32(0, 8, 4, 0xA);
assert_eq!(extract32(val, 8, 4), 0xA);

动态位图

use semx_bitops::bitmap::BitMap;

let mut bm = BitMap::create(256);
bm.set_range(64, 32);
assert_eq!(bm.count_ones(), 32);
assert_eq!(bm.find_first_bit(), 64);
assert_eq!(bm.find_next_zero_bit(64), 96);