00001 #ifndef __LIB_KERNEL_BITMAP_H
00002 #define __LIB_KERNEL_BITMAP_H
00003
00004 #include <stdbool.h>
00005 #include <stddef.h>
00006 #include <inttypes.h>
00007
00008
00009
00010
00011 struct bitmap *bitmap_create (size_t bit_cnt);
00012 struct bitmap *bitmap_create_in_buf (size_t bit_cnt, void *, size_t byte_cnt);
00013 size_t bitmap_buf_size (size_t bit_cnt);
00014 void bitmap_destroy (struct bitmap *);
00015
00016
00017 size_t bitmap_size (const struct bitmap *);
00018
00019
00020 void bitmap_set (struct bitmap *, size_t idx, bool);
00021 void bitmap_mark (struct bitmap *, size_t idx);
00022 void bitmap_reset (struct bitmap *, size_t idx);
00023 void bitmap_flip (struct bitmap *, size_t idx);
00024 bool bitmap_test (const struct bitmap *, size_t idx);
00025
00026
00027 void bitmap_set_all (struct bitmap *, bool);
00028 void bitmap_set_multiple (struct bitmap *, size_t start, size_t cnt, bool);
00029 size_t bitmap_count (const struct bitmap *, size_t start, size_t cnt, bool);
00030 bool bitmap_contains (const struct bitmap *, size_t start, size_t cnt, bool);
00031 bool bitmap_any (const struct bitmap *, size_t start, size_t cnt);
00032 bool bitmap_none (const struct bitmap *, size_t start, size_t cnt);
00033 bool bitmap_all (const struct bitmap *, size_t start, size_t cnt);
00034
00035
00036 #define BITMAP_ERROR SIZE_MAX
00037 size_t bitmap_scan (const struct bitmap *, size_t start, size_t cnt, bool);
00038 size_t bitmap_scan_and_flip (struct bitmap *, size_t start, size_t cnt, bool);
00039
00040
00041 #ifdef FILESYS
00042 struct file;
00043 size_t bitmap_file_size (const struct bitmap *);
00044 bool bitmap_read (struct bitmap *, struct file *);
00045 bool bitmap_write (const struct bitmap *, struct file *);
00046 #endif
00047
00048
00049 void bitmap_dump (const struct bitmap *);
00050
00051 #endif