text: #ifndef __LIB_KERNEL_BITMAP_H
  #define __LIB_KERNEL_BITMAP_H
  
  #include <stdbool.h>
  #include <stddef.h>
  #include <inttypes.h>
  
  /* 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 */
  