#ifndef __LIB_KERNEL_BITMAP_H #define __LIB_KERNEL_BITMAP_H #include #include #include /* Bitmap abstract data type. */ /* Creation and destruction. */ struct bitmap *bitmap_create (size_t bit_cnt); struct bitmap *bitmap_create_in_buf (size_t bit_cnt, void *, size_t byte_cnt); size_t bitmap_buf_size (size_t bit_cnt); void bitmap_destroy (struct bitmap *); /* Bitmap size. */ size_t bitmap_size (const struct bitmap *); /* Setting and testing single bits. */ void bitmap_set (struct bitmap *, size_t idx, bool); void bitmap_mark (struct bitmap *, size_t idx); void bitmap_reset (struct bitmap *, size_t idx); void bitmap_flip (struct bitmap *, size_t idx); bool bitmap_test (const struct bitmap *, size_t idx); /* Setting and testing multiple bits. */ void bitmap_set_all (struct bitmap *, bool); void bitmap_set_multiple (struct bitmap *, size_t start, size_t cnt, bool); size_t bitmap_count (const struct bitmap *, size_t start, size_t cnt, bool); bool bitmap_contains (const struct bitmap *, size_t start, size_t cnt, bool); bool bitmap_any (const struct bitmap *, size_t start, size_t cnt); bool bitmap_none (const struct bitmap *, size_t start, size_t cnt); bool bitmap_all (const struct bitmap *, size_t start, size_t cnt); /* Finding set or unset bits. */ #define BITMAP_ERROR SIZE_MAX size_t bitmap_scan (const struct bitmap *, size_t start, size_t cnt, bool); size_t bitmap_scan_and_flip (struct bitmap *, size_t start, size_t cnt, bool); /* File input and output. */ #ifdef FILESYS struct file; size_t bitmap_file_size (const struct bitmap *); bool bitmap_read (struct bitmap *, struct file *); bool bitmap_write (const struct bitmap *, struct file *); #endif /* Debugging. */ void bitmap_dump (const struct bitmap *); #endif /* lib/kernel/bitmap.h */