stdbitmap.h#

stdbitmap.hX2W-OS的标准位图实现

待办事项:

  1. 测试stdbitmap库

Author

Shihong Wang (jack4shihong@gmail.com)

Version

0.1

Date

2023-04-13

Copyright

Copyright Shihong Wang (c) 2023 with GNU Public License V3.0

Defines

BITMAP_TAKEN#

bitmap中位为1, 表示资源被占用

BITMAP_FREE#

bitmap中位为0, 表示资源未被占用

Typedefs

typedef struct __bitmap_t bitmap_t#

bitmap_t是位图结构体

Note

bitmap用于管理大量资源, 若对应位为1, 则表示该资源已经被占用; 若对应位位0, 则表示该资源未被占用

Functions

void bitmap_init(bitmap_t *btmp_ptr, size_t size)#

bitmap_init用于初始化btmp_ptr指向的位图

Parameters:
  • btmp_ptr – 指向需要初始化的位图的指针

  • size – 位图的字节数

void bitmap_set(bitmap_t *btmp_ptr, offset_t bit_idx, Bool taken)#

bitmap_set用于设置btmp_ptr指向的位图中偏移量为bit_idx的位

Parameters:
  • btmp_ptr – 指向被设置的位图的指针

  • bit_idx – 需要设置的位在位图中的偏移

  • taken – 若为True, 则将位设置为1, 表示资源被占用; 若为False, 则将位设置为0, 表示资源没有没占用

Bool bitmap_test(bitmap_t *btmp_ptr, offset_t bit_idx)#

bitmap_test用于测试btmp_ptr指向的位图中bit_idx位是否被占用

Parameters:
  • btmp_ptr – 指向需要测试的位图的指针

  • bit_idx – 需要测试的位的偏移

Returns:

True 测试的位已经被占用

Returns:

False 测试的位未被占用

offset_t bitmap_scan(bitmap_t *btmp_ptr, size_t cnt)#

bitmap_scan用于向btmp_ptr指向的位图中循找连续cnt个空闲位/资源

Note

bitmap_scan只会寻找位, 不会设置位

Parameters:
  • btmp_ptr – 指向被检查的位图

  • cnt – 连续位数

Returns:

offset_t 若不存在连续cnt个位, 则返回-1; 若存在则返回起始位的偏移

Bool bitmap_acquire(bitmap_t *btmp_ptr, offset_t out[], size_t cnt)#

bitmap_acquire会从btmp_ptr指向的位图中申请cnt个位/资源, 得到的位的偏移将会放到数组out

Note

bitmap_acquire找到位后会设置位

Warning

bitmap_acquire不会管理out是否会溢出, 需要调用者负责管理out的大小

Parameters:
  • btmp_ptr – 指向被申请资源所在的位图

  • out – 存放得到的位的偏移的数组

  • cnt – 需要申请的资源数

Returns:

True 申请成功, out会存放申请得到的位

Returns:

False 申请失败, out会被填充为 -1

void bitmap_release(bitmap_t *btmp_ptr, offset_t out[], size_t cnt)#

bitmap_release会释放从btmp_ptr中申请得到的资源

Parameters:
  • btmp_ptr – 指向需要释放的资源所在的位图

  • out – 存放需要释放的资源的数组

struct __bitmap_t#
#include <stdbitmap.h>

bitmap_t是位图结构体

Note

bitmap用于管理大量资源, 若对应位为1, 则表示该资源已经被占用; 若对应位位0, 则表示该资源未被占用

Public Members

size_t size#

位图的字节数

byte *bits#

位图的字节数组