1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* General bitsets. 205436638acc7c010349a69c3395f1a57c642dc62Ying Wang 305436638acc7c010349a69c3395f1a57c642dc62Ying Wang Copyright (C) 2002-2006, 2009-2012 Free Software Foundation, Inc. 405436638acc7c010349a69c3395f1a57c642dc62Ying Wang 5cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Contributed by Michael Hayes (m.hayes@elec.canterbury.ac.nz). 6cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 705436638acc7c010349a69c3395f1a57c642dc62Ying Wang This program is free software: you can redistribute it and/or modify 8cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project it under the terms of the GNU General Public License as published by 905436638acc7c010349a69c3395f1a57c642dc62Ying Wang the Free Software Foundation, either version 3 of the License, or 10cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (at your option) any later version. 11cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 12cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project This program is distributed in the hope that it will be useful, 13cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project but WITHOUT ANY WARRANTY; without even the implied warranty of 14cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project GNU General Public License for more details. 16cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 17cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project You should have received a copy of the GNU General Public License 1805436638acc7c010349a69c3395f1a57c642dc62Ying Wang along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 2005436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <config.h> 2105436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2205436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "bitset.h" 23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdlib.h> 25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <string.h> 26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "abitset.h" 27cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "lbitset.h" 28cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "ebitset.h" 29cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "vbitset.h" 30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "bitset_stats.h" 31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "obstack.h" 32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char * const bitset_type_names[] = BITSET_TYPE_NAMES; 34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return number of bytes required to create a N_BIT bitset 37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project of TYPE. The bitset may grow to require more bytes than this. */ 38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsize_t 39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bytes (enum bitset_type type, bitset_bindex n_bits) 40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project size_t bytes; 42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (bitset_stats_enabled) 44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_stats_bytes (); 45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project switch (type) 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project default: 49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abort (); 50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_ARRAY: 52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = abitset_bytes (n_bits); 53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_LIST: 56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = lbitset_bytes (n_bits); 57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_TABLE: 60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = ebitset_bytes (n_bits); 61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_VARRAY: 64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = vbitset_bytes (n_bits); 65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bytes; 69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Initialise bitset BSET of TYPE for N_BITS. */ 73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset 74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_init (bitset bset, bitset_bindex n_bits, enum bitset_type type) 75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (bitset_stats_enabled) 77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_stats_init (bset, n_bits, type); 78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project switch (type) 80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project default: 82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abort (); 83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_ARRAY: 85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return abitset_init (bset, n_bits); 86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_LIST: 88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return lbitset_init (bset, n_bits); 89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_TABLE: 91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return ebitset_init (bset, n_bits); 92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_VARRAY: 94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return vbitset_init (bset, n_bits); 95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Select a bitset type for a set of N_BITS and with attribute hints 100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project specified by ATTR. For variable size bitsets, N_BITS is only a 101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project hint and may be zero. */ 102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum bitset_type 103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_type_choose (bitset_bindex n_bits ATTRIBUTE_UNUSED, unsigned int attr) 104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Check attributes. */ 106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (attr & BITSET_FIXED && attr & BITSET_VARIABLE) 107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abort (); 108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (attr & BITSET_SPARSE && attr & BITSET_DENSE) 109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abort (); 110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Choose the type of bitset. Note that sometimes we will be asked 112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for a zero length fixed size bitset. */ 113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* If no attributes selected, choose a good compromise. */ 116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!attr) 117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_VARRAY; 118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (attr & BITSET_SPARSE) 120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_LIST; 121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (attr & BITSET_FIXED) 123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_ARRAY; 124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (attr & BITSET_GREEDY) 126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_TABLE; 127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_VARRAY; 129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Create a bitset of N_BITS of type TYPE. */ 133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset 134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_alloc (bitset_bindex n_bits, enum bitset_type type) 135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project size_t bytes; 137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset bset; 138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = bitset_bytes (type, n_bits); 140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset = xcalloc (1, bytes); 142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* The cache is disabled until some elements are allocated. If we 144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project have variable length arrays, then we may need to allocate a dummy 145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project element. */ 146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_init (bset, n_bits, type); 148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Create a bitset of N_BITS of type TYPE. */ 152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset 153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_obstack_alloc (struct obstack *bobstack, 154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex n_bits, enum bitset_type type) 155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project size_t bytes; 157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset bset; 158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = bitset_bytes (type, n_bits); 160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset = obstack_alloc (bobstack, bytes); 162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project memset (bset, 0, bytes); 163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_init (bset, n_bits, type); 165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Create a bitset of N_BITS and with attribute hints specified by 169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project ATTR. */ 170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset 171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_create (bitset_bindex n_bits, unsigned int attr) 172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project enum bitset_type type; 174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project type = bitset_type_choose (n_bits, attr); 176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_alloc (n_bits, type); 178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Free bitset BSET. */ 182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_free (bitset bset) 184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_FREE_ (bset); 186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project free (bset); 187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Free bitset BSET allocated on obstack. */ 191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_obstack_free (bitset bset) 193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_FREE_ (bset); 195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return bitset type. */ 199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum bitset_type 200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_type_get (bitset bset) 201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project enum bitset_type type; 203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project type = BITSET_TYPE_ (bset); 205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (type != BITSET_STATS) 206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return type; 207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_stats_type_get (bset); 209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return name of bitset type. */ 213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectconst char * 214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_type_name_get (bitset bset) 215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project enum bitset_type type; 217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project type = bitset_type_get (bset); 219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_type_names[type]; 221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Find next bit set in SRC starting from and including BITNO. 225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Return BITSET_BINDEX_MAX if SRC empty. */ 226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bindex 227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_next (bitset src, bitset_bindex bitno) 228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex val; 230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex next = bitno; 231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!bitset_list (src, &val, 1, &next)) 233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_BINDEX_MAX; 234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return val; 235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return true if both bitsets are of the same type and size. */ 239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectextern bool 240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_compatible_p (bitset bset1, bitset bset2) 241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_COMPATIBLE_ (bset1, bset2); 243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Find previous bit set in SRC starting from and including BITNO. 247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project Return BITSET_BINDEX_MAX if SRC empty. */ 248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bindex 249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_prev (bitset src, bitset_bindex bitno) 250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex val; 252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex next = bitno; 253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!bitset_list_reverse (src, &val, 1, &next)) 255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_BINDEX_MAX; 256cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return val; 257cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 258cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 259cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 260cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Find first set bit. */ 261cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bindex 262cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_first (bitset src) 263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 264cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_next (src, 0); 265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Find last set bit. */ 269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bindex 270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_last (bitset src) 271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_prev (src, 0); 273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Is BITNO in SRC the only set bit? */ 277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool 278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_only_set_p (bitset src, bitset_bindex bitno) 279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex val[2]; 281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex next = 0; 282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (bitset_list (src, val, 2, &next) != 1) 284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return false; 285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return val[0] == bitno; 286cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 287cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 289cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print contents of bitset BSET to FILE. */ 290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_print (FILE *file, bitset bset, bool verbose) 292cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int pos; 294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex i; 295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_iterator iter; 296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (verbose) 298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "n_bits = %lu, set = {", 299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (unsigned long int) bitset_size (bset)); 300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project pos = 30; 302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_FOR_EACH (iter, bset, i, 0) 303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (pos > 70) 305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "\n"); 307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project pos = 0; 308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%lu ", (unsigned long int) i); 311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project pos += 1 + (i >= 10) + (i >= 100); 312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project }; 313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (verbose) 315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "}\n"); 316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Dump bitset BSET to FILE. */ 320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_dump (FILE *file, bitset bset) 322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_print (file, bset, false); 324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Release memory associated with bitsets. */ 328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_release_memory (void) 330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project lbitset_release_memory (); 332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project ebitset_release_memory (); 333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Toggle bit BITNO in bitset BSET and the new value of the bit. */ 337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool 338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_toggle_ (bitset bset, bitset_bindex bitno) 339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* This routine is for completeness. It could be optimized if 341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project required. */ 342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (bitset_test (bset, bitno)) 343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_reset (bset, bitno); 345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return false; 346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_set (bset, bitno); 350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return true; 351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return number of bits in bitset SRC. */ 356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bindex 357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_size_ (bitset src) 358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_NBITS_ (src); 360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return number of bits set in bitset SRC. */ 364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_bindex 365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_count_ (bitset src) 366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex list[BITSET_LIST_SIZE]; 368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex next; 369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex num; 370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex count; 371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* This could be greatly sped up by adding a count method for each 373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset implementation that uses a direct technique (based on 374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project masks) for counting the number of bits set in a word. */ 375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project next = 0; 377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (count = 0; (num = bitset_list (src, list, BITSET_LIST_SIZE, &next)); 378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project count += num) 379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project continue; 380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return count; 382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = SRC. Return true if DST != SRC. 386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project This is a fallback for the case where SRC and DST are different 387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset types. */ 388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool 389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_copy_ (bitset dst, bitset src) 390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex i; 392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_iterator iter; 393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Convert bitset types. We assume that the DST bitset 395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project is large enough to hold the SRC bitset. */ 396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_zero (dst); 397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_FOR_EACH (iter, src, i, 0) 398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_set (dst, i); 400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project }; 401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return true; 403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* This is a fallback for implementations that do not support 407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project four operand operations. */ 408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic inline bool 409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_op4_cmp (bitset dst, bitset src1, bitset src2, bitset src3, 410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project enum bitset_ops op) 411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bool changed = false; 413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bool stats_enabled_save; 414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset tmp; 415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Create temporary bitset. */ 417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats_enabled_save = bitset_stats_enabled; 418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_enabled = false; 419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project tmp = bitset_alloc (0, bitset_type_get (dst)); 420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_enabled = stats_enabled_save; 421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project switch (op) 423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project default: 425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abort (); 426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_OP_OR_AND: 428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_or (tmp, src1, src2); 429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project changed = bitset_and_cmp (dst, src3, tmp); 430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_OP_AND_OR: 433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_and (tmp, src1, src2); 434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project changed = bitset_or_cmp (dst, src3, tmp); 435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_OP_ANDN_OR: 438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_andn (tmp, src1, src2); 439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project changed = bitset_or_cmp (dst, src3, tmp); 440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_free (tmp); 444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return changed; 445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = (SRC1 & SRC2) | SRC3. */ 449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_and_or_ (bitset dst, bitset src1, bitset src2, bitset src3) 451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_and_or_cmp_ (dst, src1, src2, src3); 453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = (SRC1 & SRC2) | SRC3. Return non-zero if 457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project DST != (SRC1 & SRC2) | SRC3. */ 458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool 459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_and_or_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3) 460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_AND_OR); 462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = (SRC1 & ~SRC2) | SRC3. */ 466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_andn_or_ (bitset dst, bitset src1, bitset src2, bitset src3) 468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_andn_or_cmp_ (dst, src1, src2, src3); 470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = (SRC1 & ~SRC2) | SRC3. Return non-zero if 474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project DST != (SRC1 & ~SRC2) | SRC3. */ 475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool 476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_andn_or_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3) 477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_ANDN_OR); 479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = (SRC1 | SRC2) & SRC3. */ 483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_or_and_ (bitset dst, bitset src1, bitset src2, bitset src3) 485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_or_and_cmp_ (dst, src1, src2, src3); 487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* DST = (SRC1 | SRC2) & SRC3. Return non-zero if 491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project DST != (SRC1 | SRC2) & SRC3. */ 492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool 493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_or_and_cmp_ (bitset dst, bitset src1, bitset src2, bitset src3) 494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bitset_op4_cmp (dst, src1, src2, src3, BITSET_OP_OR_AND); 496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Function to be called from debugger to print bitset. */ 500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdebug_bitset (bitset bset) 502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (bset) 504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_print (stderr, bset, true); 505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 506