bitmap.h: Add dump_bitmap...

2001-06-16  Daniel Berlin  <dan@cgsoftware.com>

	* bitmap.h: Add dump_bitmap, bitmap_zero, bitmap_union_of_diffs,
	bitmap_a_or_b, bitmap_a_and_b, bitmap_first_set_bit,
	bitmap_last_set_bit. All for compatibility with sbitmap's.

	*bitmap.c (bitmap_zero): New function.
	(bitmap_union_of_diffs): New function.
	(bitmap_first_set_bit): New function.
	(bitmap_last_set_bit): New function.

From-SVN: r43420
This commit is contained in:
Daniel Berlin 2001-06-16 16:13:25 +00:00 committed by Daniel Berlin
parent 6d34c1c4f3
commit ea1939969e
3 changed files with 60 additions and 2 deletions

View File

@ -1,3 +1,14 @@
2001-06-16 Daniel Berlin <dan@cgsoftware.com>
* bitmap.h: Add dump_bitmap, bitmap_zero, bitmap_union_of_diffs,
bitmap_a_or_b, bitmap_a_and_b, bitmap_first_set_bit,
bitmap_last_set_bit. All for compatibility with sbitmap's.
*bitmap.c (bitmap_zero): New function.
(bitmap_union_of_diffs): New function.
(bitmap_first_set_bit): New function.
(bitmap_last_set_bit): New function.
2001-06-16 Neil Booth <neil@daikokuya.demon.co.uk>
* cpp.texi, invoke.texi: Update.

View File

@ -507,7 +507,9 @@ bitmap_operation (to, from1, from2, operation)
case BITMAP_IOR:
DOIT (|);
break;
case BITMAP_IOR_COMPL:
DOIT (|~);
break;
case BITMAP_XOR:
DOIT (^);
break;
@ -676,3 +678,37 @@ bitmap_release_memory ()
obstack_free (&bitmap_obstack, NULL);
}
}
int
bitmap_union_of_diff (dst, a, b, c)
bitmap dst;
bitmap a;
bitmap b;
bitmap c;
{
int changed = 0;
bitmap temp = BITMAP_ALLOCA ();
bitmap_operation (temp, b, c, BITMAP_AND_COMPL);
changed = bitmap_operation (dst, temp, a, BITMAP_IOR);
return changed;
}
int
bitmap_first_set_bit (a)
bitmap a;
{
int i;
EXECUTE_IF_SET_IN_BITMAP (a, 0, i, return i;);
return -1;
}
int
bitmap_last_set_bit (a)
bitmap a;
{
int i;
EXECUTE_IF_SET_IN_BITMAP (a, 0, i, );
if (bitmap_bit_p (a, i))
return i;
return -1;
}

View File

@ -52,6 +52,7 @@ typedef struct bitmap_head_def {
bitmap_element *first; /* First element in linked list. */
bitmap_element *current; /* Last element looked at. */
unsigned int indx; /* Index of last element looked at. */
} bitmap_head, *bitmap;
/* Enumeration giving the various operations we support. */
@ -59,7 +60,8 @@ enum bitmap_bits {
BITMAP_AND, /* TO = FROM1 & FROM2 */
BITMAP_AND_COMPL, /* TO = FROM1 & ~ FROM2 */
BITMAP_IOR, /* TO = FROM1 | FROM2 */
BITMAP_XOR /* TO = FROM1 ^ FROM2 */
BITMAP_XOR, /* TO = FROM1 ^ FROM2 */
BITMAP_IOR_COMPL /* TO = FROM1 | ~FROM2 */
};
/* Global data */
@ -104,6 +106,15 @@ extern bitmap bitmap_initialize PARAMS ((bitmap));
/* Release all memory held by bitmaps. */
extern void bitmap_release_memory PARAMS ((void));
/* A few compatibility/functions macros for compatibility with sbitmaps */
#define dump_bitmap(file, bitmap) bitmap_print (file, bitmap, "", "\n")
#define bitmap_zero(a) bitmap_clear (a)
#define bitmap_a_or_b(a,b,c) bitmap_operation (a, b, c, BITMAP_IOR)
#define bitmap_a_and_b(a,b,c) bitmap_operation (a, b, c, BITMAP_AND)
extern int bitmap_union_of_diff PARAMS((bitmap, bitmap, bitmap, bitmap));
extern int bitmap_first_set_bit PARAMS((bitmap));
extern int bitmap_last_set_bit PARAMS((bitmap));
/* Allocate a bitmap with oballoc. */
#define BITMAP_OBSTACK_ALLOC(OBSTACK) \
bitmap_initialize ((bitmap) obstack_alloc (OBSTACK, sizeof (bitmap_head)))