Changeset 0773396 in mainline for kernel/generic/include/adt/bitmap.h


Ignore:
Timestamp:
2013-12-25T13:05:25Z (10 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bc54126c
Parents:
f4a47e52 (diff), 6946f23 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the (diff) links above to see all the changes relative to each parent.
Message:

merge mainline changes

File:
1 edited

Legend:

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

    rf4a47e52 r0773396  
    3838#include <typedefs.h>
    3939
    40 #define BITS2BYTES(bits)        (bits ? ((((bits)-1)>>3)+1) : 0)
     40#define BITMAP_ELEMENT   8
     41#define BITMAP_REMAINER  7
    4142
    4243typedef struct {
    43         uint8_t *map;
    44         size_t bits;
     44        size_t elements;
     45        uint8_t *bits;
     46        size_t next_fit;
    4547} bitmap_t;
    4648
    47 extern void bitmap_initialize(bitmap_t *bitmap, uint8_t *map, size_t bits);
    48 extern void bitmap_set_range(bitmap_t *bitmap, size_t start, size_t bits);
    49 extern void bitmap_clear_range(bitmap_t *bitmap, size_t start, size_t bits);
    50 extern void bitmap_copy(bitmap_t *dst, bitmap_t *src, size_t bits);
     49static inline void bitmap_set(bitmap_t *bitmap, size_t element,
     50    unsigned int value)
     51{
     52        if (element >= bitmap->elements)
     53                return;
     54       
     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        }
     64}
    5165
    52 static inline int bitmap_get(bitmap_t *bitmap, size_t bit)
     66static inline unsigned int bitmap_get(bitmap_t *bitmap, size_t element)
    5367{
    54         if(bit >= bitmap->bits)
     68        if (element >= bitmap->elements)
    5569                return 0;
    5670       
    57         return !! ((bitmap->map)[bit/8] & (1 << (bit & 7)));
     71        size_t byte = element / BITMAP_ELEMENT;
     72        uint8_t mask = 1 << (element & BITMAP_REMAINER);
     73       
     74        return !!((bitmap->bits)[byte] & mask);
    5875}
    5976
     77extern size_t bitmap_size(size_t);
     78extern void bitmap_initialize(bitmap_t *, size_t, void *);
     79
     80extern void bitmap_set_range(bitmap_t *, size_t, size_t);
     81extern void bitmap_clear_range(bitmap_t *, size_t, size_t);
     82
     83extern int bitmap_allocate_range(bitmap_t *, size_t, size_t, size_t, size_t,
     84    size_t *);
     85extern void bitmap_copy(bitmap_t *, bitmap_t *, size_t);
    6086
    6187#endif
Note: See TracChangeset for help on using the changeset viewer.