/* Bitset vectors.
   Copyright (C) 2002, 2004 Free Software Foundation, Inc.
   Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz).

This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.  */

#ifndef _BITSETV_H
#define _BITSETV_H

#include "bitset.h"

typedef bitset * bitsetv;

/* Create a vector of N_VECS bitsets, each of N_BITS, and of
   type TYPE.  */
extern bitsetv bitsetv_alloc (bitset_bindex, bitset_bindex, enum bitset_type);

/* Create a vector of N_VECS bitsets, each of N_BITS, and with
   attribute hints specified by ATTR.  */
extern bitsetv bitsetv_create (bitset_bindex, bitset_bindex, unsigned int);

/* Free vector of bitsets.  */
extern void bitsetv_free (bitsetv);

/* Zero vector of bitsets.  */
extern void bitsetv_zero (bitsetv);

/* Set vector of bitsets.  */
extern void bitsetv_ones (bitsetv);

/* Given a vector BSETV of N bitsets of size N, modify its contents to
   be the transitive closure of what was given.  */
extern void bitsetv_transitive_closure (bitsetv);

/* Given a vector BSETV of N bitsets of size N, modify its contents to
   be the reflexive transitive closure of what was given.  This is
   the same as transitive closure but with all bits on the diagonal
   of the bit matrix set.  */
extern void bitsetv_reflexive_transitive_closure (bitsetv);

/* Dump vector of bitsets.  */
extern void bitsetv_dump (FILE *, const char *, const char *, bitsetv);

/* Function to debug vector of bitsets from debugger.  */
extern void debug_bitsetv (bitsetv);

#endif  /* _BITSETV_H  */
