1/*** 2 This file is part of PulseAudio. 3 4 Copyright 2009 Lennart Poettering 5 6 PulseAudio is free software; you can redistribute it and/or modify 7 it under the terms of the GNU Lesser General Public License as published 8 by the Free Software Foundation; either version 2.1 of the License, 9 or (at your option) any later version. 10 11 PulseAudio is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 General Public License for more details. 15 16 You should have received a copy of the GNU Lesser General Public License 17 along with PulseAudio; if not, see <http://www.gnu.org/licenses/>. 18***/ 19 20#ifdef HAVE_CONFIG_H 21#include <config.h> 22#endif 23 24#include <string.h> 25 26#include <pulse/xmalloc.h> 27 28#include "bitset.h" 29 30void pa_bitset_set(pa_bitset_t *b, unsigned k, bool v) { 31 pa_assert(b); 32 33 if (v) 34 b[k >> 5] |= 1 << (k & 31); 35 else 36 b[k >> 5] &= ~((uint32_t) (1 << (k & 31))); 37} 38 39bool pa_bitset_get(const pa_bitset_t *b, unsigned k) { 40 return !!(b[k >> 5] & (1 << (k & 31))); 41} 42 43bool pa_bitset_equals(const pa_bitset_t *b, unsigned n, ...) { 44 va_list ap; 45 pa_bitset_t *a; 46 bool equal; 47 48 a = pa_xnew0(pa_bitset_t, PA_BITSET_ELEMENTS(n)); 49 50 va_start(ap, n); 51 for (;;) { 52 int j = va_arg(ap, int); 53 54 if (j < 0) 55 break; 56 57 pa_bitset_set(a, j, true); 58 } 59 va_end(ap); 60 61 equal = memcmp(a, b, PA_BITSET_SIZE(n)) == 0; 62 pa_xfree(a); 63 64 return equal; 65} 66