From 77d895d6867461b2433616d10ddf2c5fa0b6f4d3 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Fri, 26 Aug 2011 12:58:36 -0700 Subject: [PATCH] bitmap: New function to allocate a bitmap initialized to all-1-bits. --- lib/bitmap.c | 21 ++++++++++++++++++++- lib/bitmap.h | 2 ++ 2 files changed, 22 insertions(+), 1 deletion(-) 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 +/* 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 diff --git a/lib/bitmap.h b/lib/bitmap.h index f6feff08..c76e45f3 100644 --- a/lib/bitmap.h +++ b/lib/bitmap.h @@ -53,6 +53,8 @@ bitmap_allocate(size_t n_bits) return xzalloc(bitmap_n_bytes(n_bits)); } +unsigned long *bitmap_allocate1(size_t n_bits); + static inline unsigned long * bitmap_clone(const unsigned long *bitmap, size_t n_bits) { -- 2.30.2