semx_bitops 0.1.61

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

[![crates.io](https://img.shields.io/crates/v/semx_bitops.svg)](https://crates.io/crates/semx_bitops)
[![docs.rs](https://docs.rs/semx_bitops/badge.svg)](https://docs.rs/semx_bitops)

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

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

## 功能

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

## 用法

### 位操作原语

```rust
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);
```

### 位域操作

```rust
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);
```

### 动态位图

```rust
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);
```