/* bitarr.h */

/*
   Prototypes for bitarr.c

   IMPORTANT NOTE: A version of this code appeared in 
                   Dr. Dobb's Journal issue #233 (August 1995)
                   Volume 20 Issue 8
                   in an article entitled `Implementing Bit Vectors in C'
                   by James Blustein 
                   Pages 42, 44, 46 (article) and pages 96, 98-100 (code)
                   The code is (c) copyright 1995 by Miller Freeman, Inc.

   See "bitarr.c" for further details.
*/

elem_t ba_init(void);
bit *ba_new(const elem_t nelems);
void ba_copy(bit dst[], const bit src[], const elem_t size);
void ba_assign(bit arr[], elem_t elem, const bool value);
bool ba_value(const bit arr[], const elem_t elem);
void ba_toggle(bit arr[], const elem_t elem);
void ba_all_assign(bit arr[], const elem_t lsize, const bool value);
bit *ba_ul2b(unsigned long num, bit *arr, elem_t *size);
unsigned long ba_count(const bit arr[], const elem_t size);
bool ba_intersection(bit first[], bit second[], \
 bit * result[], const elem_t size_first, const elem_t size_second);
bool ba_union(bit first[], bit second[], bit * result[], \
 const elem_t size_first, const elem_t size_second);
bool ba_diff(bit first[], bit second[], bit * result[], \
 const elem_t size_first, const elem_t size_second);
void ba_complement(bit arr[], const elem_t lsize);
unsigned long ba_dotprod(const bit first[], const bit second[], \
 const elem_t size_first, const elem_t size_second);
char * ba_b2str(const bit arr[], const elem_t size, char * dest);
bool ba_print(const bit arr[], const elem_t size, FILE * dest);


