Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/include/adt/bitmap.h

    rf72906c r9d58539  
    3838#include <typedefs.h>
    3939
    40 #define BITMAP_ELEMENT   8
    41 #define BITMAP_REMAINER  7
     40#define BITS2BYTES(bits)        (bits ? ((((bits)-1)>>3)+1) : 0)
    4241
    4342typedef struct {
    44         size_t elements;
    45         uint8_t *bits;
    46         size_t next_fit;
     43        uint8_t *map;
     44        size_t bits;
    4745} bitmap_t;
    4846
    49 static inline void bitmap_set(bitmap_t *bitmap, size_t element,
    50     unsigned int value)
     47extern void bitmap_initialize(bitmap_t *bitmap, uint8_t *map, size_t bits);
     48extern void bitmap_set_range(bitmap_t *bitmap, size_t start, size_t bits);
     49extern void bitmap_clear_range(bitmap_t *bitmap, size_t start, size_t bits);
     50extern void bitmap_copy(bitmap_t *dst, bitmap_t *src, size_t bits);
     51
     52static inline int bitmap_get(bitmap_t *bitmap, size_t bit)
    5153{
    52         if (element >= bitmap->elements)
    53                 return;
     54        if(bit >= bitmap->bits)
     55                return 0;
    5456       
    55         size_t byte = element / BITMAP_ELEMENT;
    56         uint8_t mask = 1 << (element & BITMAP_REMAINER);
    57        
    58         if (value) {
    59                 bitmap->bits[byte] |= mask;
    60         } else {
    61                 bitmap->bits[byte] &= ~mask;
    62                 bitmap->next_fit = byte;
    63         }
     57        return !! ((bitmap->map)[bit/8] & (1 << (bit & 7)));
    6458}
    6559
    66 static inline unsigned int bitmap_get(bitmap_t *bitmap, size_t element)
    67 {
    68         if (element >= bitmap->elements)
    69                 return 0;
    70        
    71         size_t byte = element / BITMAP_ELEMENT;
    72         uint8_t mask = 1 << (element & BITMAP_REMAINER);
    73        
    74         return !!((bitmap->bits)[byte] & mask);
    75 }
    76 
    77 extern size_t bitmap_size(size_t);
    78 extern void bitmap_initialize(bitmap_t *, size_t, void *);
    79 
    80 extern void bitmap_set_range(bitmap_t *, size_t, size_t);
    81 extern void bitmap_clear_range(bitmap_t *, size_t, size_t);
    82 
    83 extern int bitmap_allocate_range(bitmap_t *, size_t, size_t, size_t, size_t,
    84     size_t *);
    85 extern void bitmap_copy(bitmap_t *, bitmap_t *, size_t);
    8660
    8761#endif
Note: See TracChangeset for help on using the changeset viewer.