1 | /*************************************** 2 | $Revision: 1.8 $ 3 | 4 | bitmask (ma) - bitmask.h - header file for bitmask library 5 | 6 | Status: NOT REVUED, TESTED, INCOMPLETE 7 | 8 | Design and implementation by: Marek Bukowy 9 | 10 | ******************/ /****************** 11 | Copyright (c) 1999 RIPE NCC 12 | 13 | All Rights Reserved 14 | 15 | Permission to use, copy, modify, and distribute this software and its 16 | documentation for any purpose and without fee is hereby granted, 17 | provided that the above copyright notice appear in all copies and that 18 | both that copyright notice and this permission notice appear in 19 | supporting documentation, and that the name of the author not be 20 | used in advertising or publicity pertaining to distribution of the 21 | software without specific, written prior permission. 22 | 23 | THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING 24 | ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL 25 | AUTHOR BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY 26 | DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN 27 | AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 28 | OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 29 | ***************************************/ 30 | 31 | 32 | #ifndef READ_BITMASK 33 | #define READ_BITMASK 34 | 35 | #define MASK_BITS_BASETYPE unsigned int 36 | #define MASK_BITS_BASESIZE (8 * sizeof (MASK_BITS_BASETYPE)) 37 | 38 | /* size of the mask: to keep things simple, there is only one size 39 | that must suit everybody. The requirements are listed below. 40 | 41 | Marek: Aspects. Not many so far, about 30-40 possible. 42 | Chris: Query types, 78 at the moment, probably less than 128 at the end 43 | */ 44 | 45 | 46 | #define MASK_MAX 128 47 | #define MASK_BITS_WORDS (MASK_MAX / MASK_BITS_BASESIZE + 1) 48 | 49 | typedef struct { 50 | MASK_BITS_BASETYPE data[MASK_BITS_WORDS]; 51 | } mask_t; 52 | 53 | 54 | #define MA_END (-1) 55 | 56 | #ifdef __cplusplus 57 | extern "C" { 58 | #endif 59 | 60 | void MA_free(mask_t *m); 61 | int MA_isset(mask_t d, unsigned b); 62 | void MA_set(mask_t *m_ptr, unsigned b, unsigned v); 63 | void MA_clear(mask_t *m_ptr); 64 | mask_t MA_new(int n,...); 65 | void MA_prt(mask_t m); 66 | mask_t MA_and(mask_t a, mask_t b); 67 | mask_t MA_xor(mask_t a, mask_t b); 68 | mask_t MA_or(mask_t a, mask_t b); 69 | mask_t MA_not(mask_t a); 70 | int MA_bitcount(mask_t m); 71 | char *MA_to_string(mask_t mask, char * const *tokens); 72 | 73 | #define MA_eq(a,b) (memcmp( &(a), &(b), sizeof(mask_t))==0) 74 | 75 | #ifdef __cplusplus 76 | } 77 | 78 | #endif 79 | 80 | 81 | #endif /* READ_BITMASK */