Home | History | Annotate | Download | only in sys
      1 /*
      2  * CDDL HEADER START
      3  *
      4  * The contents of this file are subject to the terms of the
      5  * Common Development and Distribution License (the "License").
      6  * You may not use this file except in compliance with the License.
      7  *
      8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
      9  * or http://www.opensolaris.org/os/licensing.
     10  * See the License for the specific language governing permissions
     11  * and limitations under the License.
     12  *
     13  * When distributing Covered Code, include this CDDL HEADER in each
     14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
     15  * If applicable, add the following below this CDDL HEADER, with the
     16  * fields enclosed by brackets "[]" replaced with your own identifying
     17  * information: Portions Copyright [yyyy] [name of copyright owner]
     18  *
     19  * CDDL HEADER END
     20  */
     21 /*
     22  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
     23  * Use is subject to license terms.
     24  */
     25 
     26 #ifndef	_BITSET_H
     27 #define	_BITSET_H
     28 
     29 #ifdef	__cplusplus
     30 extern "C" {
     31 #endif
     32 
     33 #if (defined(_KERNEL) || defined(_KMEMUSER))
     34 #include <sys/bitmap.h>
     35 #include <sys/types.h>
     36 
     37 typedef struct bitset {
     38 	ulong_t	*bs_set;
     39 	uint_t	bs_words;
     40 } bitset_t;
     41 
     42 /*
     43  * Bitset initialiation / teardown
     44  */
     45 void		bitset_init(bitset_t *);
     46 void		bitset_fini(bitset_t *);
     47 
     48 /*
     49  * Resize / query a bitset's holding capacity
     50  */
     51 void		bitset_resize(bitset_t *, uint_t);
     52 uint_t		bitset_capacity(bitset_t *);
     53 
     54 /*
     55  * Set / clear a bit in the set
     56  */
     57 void		bitset_add(bitset_t *, uint_t);
     58 void		bitset_del(bitset_t *, uint_t);
     59 
     60 /*
     61  * Atomic operations
     62  */
     63 void		bitset_atomic_add(bitset_t *, uint_t);
     64 void		bitset_atomic_del(bitset_t *, uint_t);
     65 int		bitset_atomic_test_and_add(bitset_t *, uint_t);
     66 int		bitset_atomic_test_and_del(bitset_t *, uint_t);
     67 
     68 /*
     69  * Bitset queries
     70  */
     71 int		bitset_in_set(bitset_t *, uint_t);
     72 int		bitset_is_null(bitset_t *);
     73 uint_t		bitset_find(bitset_t *);
     74 
     75 /*
     76  * Bitset computations
     77  */
     78 int		bitset_and(bitset_t *, bitset_t *, bitset_t *);
     79 int		bitset_or(bitset_t *, bitset_t *, bitset_t *);
     80 int		bitset_xor(bitset_t *, bitset_t *, bitset_t *);
     81 
     82 /*
     83  * Miscellaneous bitset operations
     84  */
     85 void		bitset_zero(bitset_t *);
     86 void		bitset_copy(bitset_t *, bitset_t *);
     87 int		bitset_match(bitset_t *, bitset_t *);
     88 
     89 #endif	/* !_KERNEL && !_KMEMUSER */
     90 
     91 #ifdef	__cplusplus
     92 }
     93 #endif
     94 
     95 #endif /* _BITSET_H */
     96