diff options
author | Ben Pfaff <blp@nicira.com> | 2011-08-26 12:58:36 -0700 |
---|---|---|
committer | Ben Pfaff <blp@nicira.com> | 2011-09-26 13:15:56 -0700 |
commit | 77d895d6867461b2433616d10ddf2c5fa0b6f4d3 (patch) | |
tree | f2a14adc6bb8aebd5fdc561244b15ceae006641d /lib/bitmap.c | |
parent | 04c956fc029bb97de17b62cb6d243b50f0bc9f58 (diff) |
bitmap: New function to allocate a bitmap initialized to all-1-bits.
Diffstat (limited to 'lib/bitmap.c')
-rw-r--r-- | lib/bitmap.c | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/lib/bitmap.c b/lib/bitmap.c index df3c4ebc..76a667a0 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, 2009 Nicira Networks. + * Copyright (c) 2008, 2009, 2011 Nicira Networks. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,25 @@ #include "bitmap.h" #include <string.h> +/* Allocates and returns a bitmap initialized to all-1-bits. */ +unsigned long * +bitmap_allocate1(size_t n_bits) +{ + size_t n_bytes = bitmap_n_bytes(n_bits); + size_t n_longs = bitmap_n_longs(n_bits); + unsigned long *bitmap; + + /* Allocate and initialize most of the bitmap. */ + bitmap = xmalloc(n_bytes); + memset(bitmap, 0xff, n_bytes); + + /* Ensure that the last "unsigned long" in the bitmap only has as many + * 1-bits as there actually should be. */ + bitmap[n_longs - 1] = (1UL << (n_bits % BITMAP_ULONG_BITS)) - 1; + + return bitmap; +} + /* Sets 'count' consecutive bits in 'bitmap', starting at bit offset 'start', * to 'value'. */ void |