X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flib%2Fkernel%2Fbitmap.h;h=a50593c9f291d56a80ac81c5b5362a17eb1d7b00;hb=ca00eb38b220df6f4c1112ae104fff1d56f2b310;hp=dbb70046c96c9074119689827169dacf249fcde2;hpb=00bb787f8b81b6ff3664869fbc0073f9b16c7a84;p=pintos-anon diff --git a/src/lib/kernel/bitmap.h b/src/lib/kernel/bitmap.h index dbb7004..a50593c 100644 --- a/src/lib/kernel/bitmap.h +++ b/src/lib/kernel/bitmap.h @@ -3,45 +3,49 @@ #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_set_all (struct bitmap *, bool); -void bitmap_set_multiple (struct bitmap *, size_t start, size_t end, 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); -#define BITMAP_ERROR ((size_t) -1) +/* 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); - -size_t bitmap_count (const struct bitmap *, size_t start, size_t end, bool); -bool bitmap_any (const struct bitmap *, size_t start, size_t end); -bool bitmap_none (const struct bitmap *, size_t start, size_t end); -bool bitmap_all (const struct bitmap *, size_t start, size_t end); +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 *); -void bitmap_read (struct bitmap *, struct file *); -void bitmap_write (const struct bitmap *, struct file *); +bool bitmap_read (struct bitmap *, struct file *); +bool bitmap_write (const struct bitmap *, struct file *); #endif +/* Debugging. */ void bitmap_dump (const struct bitmap *); -size_t bitmap_needed_bytes (size_t bit_cnt); -struct bitmap *bitmap_create_preallocated (size_t bit_cnt, - void *, size_t byte_cnt); - #endif /* lib/kernel/bitmap.h */