1cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Bitset statistics. 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 20cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* This file is a wrapper bitset implementation for the other bitset 21cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project implementations. It provides bitset compatibility checking and 22cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project statistics gathering without having to instrument the bitset 23cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project implementations. When statistics gathering is enabled, the bitset 24cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project operations get vectored through here and we then call the appropriate 25cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project routines. */ 26cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 2705436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include <config.h> 2805436638acc7c010349a69c3395f1a57c642dc62Ying Wang 2905436638acc7c010349a69c3395f1a57c642dc62Ying Wang#include "bitset_stats.h" 30cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 31cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "bbitset.h" 32cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "abitset.h" 33cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "ebitset.h" 34cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "lbitset.h" 35cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "vbitset.h" 36cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdlib.h> 37cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <string.h> 38cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include <stdio.h> 39cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 40cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#include "gettext.h" 41cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define _(Msgid) gettext (Msgid) 42cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 43cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Configuration macros. */ 44cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_FILE "bitset.dat" 45cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_LOG_COUNT_BINS 10 46cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_LOG_SIZE_BINS 16 47cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_DENSITY_BINS 20 48cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 49cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 50cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Accessor macros. */ 51cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_ALLOCS_INC(TYPE) \ 52cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[(TYPE)].allocs++ 53cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_FREES_INC(BSET) \ 54cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].frees++ 55cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_SETS_INC(BSET) \ 56cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].sets++ 57cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_CACHE_SETS_INC(BSET) \ 58cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_sets++ 59cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_RESETS_INC(BSET) \ 60cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].resets++ 61cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_CACHE_RESETS_INC(BSET) \ 62cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_resets++ 63cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_TESTS_INC(BSET) \ 64cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].tests++ 65cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_CACHE_TESTS_INC(BSET) \ 66cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].cache_tests++ 67cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_LISTS_INC(BSET) \ 68cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].lists++ 69cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_LIST_COUNTS_INC(BSET, I) \ 70cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_counts[(I)]++ 71cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_LIST_SIZES_INC(BSET, I) \ 72cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_sizes[(I)]++ 73cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project#define BITSET_STATS_LIST_DENSITY_INC(BSET, I) \ 74cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info->types[BITSET_TYPE_ (BSET)].list_density[(I)]++ 75cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 76cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 77cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct bitset_type_info_struct 78cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 79cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int allocs; 80cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int frees; 81cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int lists; 82cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int sets; 83cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int cache_sets; 84cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int resets; 85cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int cache_resets; 86cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int tests; 87cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int cache_tests; 88cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int list_counts[BITSET_LOG_COUNT_BINS]; 89cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int list_sizes[BITSET_LOG_SIZE_BINS]; 90cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int list_density[BITSET_DENSITY_BINS]; 91cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 92cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 93cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct bitset_stats_info_struct 94cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 95cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int runs; 96cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project struct bitset_type_info_struct types[BITSET_TYPE_NUM]; 97cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 98cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 99cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 100cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct bitset_stats_info_struct bitset_stats_info_data; 101cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct bitset_stats_info_struct *bitset_stats_info; 102cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbool bitset_stats_enabled = false; 103cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 104cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 105cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print a percentage histogram with message MSG to FILE. */ 106cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 107cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_percent_histogram_print (FILE *file, const char *name, const char *msg, 108cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int n_bins, unsigned int *bins) 109cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 110cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int i; 111cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int total; 112cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 113cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project total = 0; 114cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0; i < n_bins; i++) 115cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project total += bins[i]; 116cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 117cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!total) 118cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return; 119cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 120cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%s %s", name, msg); 121cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0; i < n_bins; i++) 122cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%.0f-%.0f%%\t%8u (%5.1f%%)\n", 123cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project i * 100.0 / n_bins, 124cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (i + 1) * 100.0 / n_bins, bins[i], 125cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (100.0 * bins[i]) / total); 126cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 127cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 128cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 129cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print a log histogram with message MSG to FILE. */ 130cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 131cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_log_histogram_print (FILE *file, const char *name, const char *msg, 132cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int n_bins, unsigned int *bins) 133cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 134cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int i; 135cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int total; 136cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project unsigned int max_width; 137cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 138cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project total = 0; 139cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0; i < n_bins; i++) 140cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project total += bins[i]; 141cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 142cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!total) 143cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return; 144cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 145cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Determine number of useful bins. */ 146cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = n_bins; i > 3 && ! bins[i - 1]; i--) 147cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project continue; 148cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project n_bins = i; 149cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 150cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* 2 * ceil (log10 (2) * (N - 1)) + 1. */ 151cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project max_width = 2 * (unsigned int) (0.30103 * (n_bins - 1) + 0.9999) + 1; 152cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 153cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%s %s", name, msg); 154cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0; i < 2; i++) 155cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%*d\t%8u (%5.1f%%)\n", 156cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project max_width, i, bins[i], 100.0 * bins[i] / total); 157cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 158cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (; i < n_bins; i++) 159cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%*lu-%lu\t%8u (%5.1f%%)\n", 160cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project max_width - ((unsigned int) (0.30103 * (i) + 0.9999) + 1), 161cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 1UL << (i - 1), 162cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (1UL << i) - 1, 163cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bins[i], 164cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project (100.0 * bins[i]) / total); 165cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 166cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 167cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 168cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print bitset statistics to FILE. */ 169cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 170cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_print_1 (FILE *file, const char *name, 171cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project struct bitset_type_info_struct *stats) 172cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 173cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!stats) 174cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return; 175cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 176cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, "%s:\n", name); 177cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("%u bitset_allocs, %u freed (%.2f%%).\n"), 178cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->allocs, stats->frees, 179cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->allocs ? 100.0 * stats->frees / stats->allocs : 0); 180cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("%u bitset_sets, %u cached (%.2f%%)\n"), 181cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->sets, stats->cache_sets, 182cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->sets ? 100.0 * stats->cache_sets / stats->sets : 0); 183cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("%u bitset_resets, %u cached (%.2f%%)\n"), 184cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->resets, stats->cache_resets, 185cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->resets ? 100.0 * stats->cache_resets / stats->resets : 0); 186cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("%u bitset_tests, %u cached (%.2f%%)\n"), 187cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->tests, stats->cache_tests, 188cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project stats->tests ? 100.0 * stats->cache_tests / stats->tests : 0); 189cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 190cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("%u bitset_lists\n"), stats->lists); 191cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 192cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_log_histogram_print (file, name, _("count log histogram\n"), 193cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_LOG_COUNT_BINS, stats->list_counts); 194cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 195cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_log_histogram_print (file, name, _("size log histogram\n"), 196cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_LOG_SIZE_BINS, stats->list_sizes); 197cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 198cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_percent_histogram_print (file, name, _("density histogram\n"), 199cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_DENSITY_BINS, stats->list_density); 200cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 201cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 202cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 203cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Print all bitset statistics to FILE. */ 204cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 205cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_print (FILE *file, bool verbose ATTRIBUTE_UNUSED) 206cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 207cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project int i; 208cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 209cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!bitset_stats_info) 210cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return; 211cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 212cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("Bitset statistics:\n\n")); 213cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 214cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (bitset_stats_info->runs > 1) 215cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project fprintf (file, _("Accumulated runs = %u\n"), bitset_stats_info->runs); 216cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 217cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0; i < BITSET_TYPE_NUM; i++) 218cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_print_1 (file, bitset_type_names[i], 219cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project &bitset_stats_info->types[i]); 220cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 221cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 222cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 223cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Initialise bitset statistics logging. */ 224cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 225cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_enable (void) 226cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 227cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!bitset_stats_info) 228cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info = &bitset_stats_info_data; 229cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_enabled = true; 230cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 231cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 232cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 233cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 234cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_disable (void) 235cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 236cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_enabled = false; 237cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 238cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 239cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 240cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Read bitset statistics file. */ 241cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 242cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_read (const char *file_name) 243cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 244cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project FILE *file; 245cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 246cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!bitset_stats_info) 247cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return; 248cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 249cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!file_name) 250cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project file_name = BITSET_STATS_FILE; 251cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 252cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project file = fopen (file_name, "r"); 253cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (file) 254cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 255cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (fread (&bitset_stats_info_data, sizeof (bitset_stats_info_data), 25605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, file) != 1) 25705436638acc7c010349a69c3395f1a57c642dc62Ying Wang { 25805436638acc7c010349a69c3395f1a57c642dc62Ying Wang if (ferror (file)) 25905436638acc7c010349a69c3395f1a57c642dc62Ying Wang perror (_("cannot read stats file")); 26005436638acc7c010349a69c3395f1a57c642dc62Ying Wang else 26105436638acc7c010349a69c3395f1a57c642dc62Ying Wang fprintf (stderr, _("bad stats file size\n")); 26205436638acc7c010349a69c3395f1a57c642dc62Ying Wang } 263cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (fclose (file) != 0) 26405436638acc7c010349a69c3395f1a57c642dc62Ying Wang perror (_("cannot read stats file")); 265cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 266cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_info_data.runs++; 267cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 268cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 269cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 270cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Write bitset statistics file. */ 271cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 272cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_write (const char *file_name) 273cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 274cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project FILE *file; 275cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 276cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!bitset_stats_info) 277cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return; 278cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 279cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (!file_name) 280cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project file_name = BITSET_STATS_FILE; 281cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 282cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project file = fopen (file_name, "w"); 283cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (file) 284cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 285cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (fwrite (&bitset_stats_info_data, sizeof (bitset_stats_info_data), 28605436638acc7c010349a69c3395f1a57c642dc62Ying Wang 1, file) != 1) 28705436638acc7c010349a69c3395f1a57c642dc62Ying Wang perror (_("cannot write stats file")); 288cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (fclose (file) != 0) 28905436638acc7c010349a69c3395f1a57c642dc62Ying Wang perror (_("cannot write stats file")); 290cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 291cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 29205436638acc7c010349a69c3395f1a57c642dc62Ying Wang perror (_("cannot open stats file for writing")); 293cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 294cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 295cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 296cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Dump bitset statistics to FILE. */ 297cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 298cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_dump (FILE *file) 299cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 300cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_print (file, false); 301cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 302cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 303cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 304cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Function to be called from debugger to print bitset stats. */ 305cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectvoid 306cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectdebug_bitset_stats (void) 307cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 308cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_print (stderr, true); 309cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 310cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 311cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 312cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 313cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_set (bitset dst, bitset_bindex bitno) 314cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 315cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset bset = dst->s.bset; 316cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_windex wordno = bitno / BITSET_WORD_BITS; 317cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_windex offset = wordno - bset->b.cindex; 318cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 319cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_SETS_INC (bset); 320cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 321cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (offset < bset->b.csize) 322cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 323cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->b.cdata[offset] |= (bitset_word) 1 << (bitno % BITSET_WORD_BITS); 324cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_CACHE_SETS_INC (bset); 325cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 326cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 327cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_SET_ (bset, bitno); 328cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 329cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 330cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 331cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 332cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_reset (bitset dst, bitset_bindex bitno) 333cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 334cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset bset = dst->s.bset; 335cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_windex wordno = bitno / BITSET_WORD_BITS; 336cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_windex offset = wordno - bset->b.cindex; 337cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 338cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_RESETS_INC (bset); 339cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 340cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (offset < bset->b.csize) 341cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 342cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->b.cdata[offset] &= 343cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project ~((bitset_word) 1 << (bitno % BITSET_WORD_BITS)); 344cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_CACHE_RESETS_INC (bset); 345cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 346cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 347cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_RESET_ (bset, bitno); 348cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 349cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 350cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 351cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 352cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_toggle (bitset src, bitset_bindex bitno) 353cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 354cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_TOGGLE_ (src->s.bset, bitno); 355cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 356cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 357cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 358cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 359cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_test (bitset src, bitset_bindex bitno) 360cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 361cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset bset = src->s.bset; 362cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_windex wordno = bitno / BITSET_WORD_BITS; 363cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_windex offset = wordno - bset->b.cindex; 364cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 365cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_TESTS_INC (bset); 366cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 367cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (offset < bset->b.csize) 368cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 369cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_CACHE_TESTS_INC (bset); 370cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return (bset->b.cdata[offset] >> (bitno % BITSET_WORD_BITS)) & 1; 371cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 372cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project else 373cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_TEST_ (bset, bitno); 374cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 375cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 376cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 377cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bitset_bindex 378cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_resize (bitset src, bitset_bindex size) 379cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 380cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_RESIZE_ (src->s.bset, size); 381cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 382cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 383cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 384cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bitset_bindex 385cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_size (bitset src) 386cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 387cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_SIZE_ (src->s.bset); 388cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 389cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 390cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 391cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bitset_bindex 392cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_count (bitset src) 393cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 394cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_COUNT_ (src->s.bset); 395cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 396cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 397cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 398cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 399cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_empty_p (bitset dst) 400cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 401cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_EMPTY_P_ (dst->s.bset); 402cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 403cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 404cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 405cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 406cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_ones (bitset dst) 407cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 408cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_ONES_ (dst->s.bset); 409cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 410cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 411cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 412cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 413cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_zero (bitset dst) 414cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 415cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_ZERO_ (dst->s.bset); 416cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 417cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 418cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 419cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 420cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_copy (bitset dst, bitset src) 421cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 422cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK2_ (dst, src); 423cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_COPY_ (dst->s.bset, src->s.bset); 424cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 425cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 426cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 427cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 428cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_disjoint_p (bitset dst, bitset src) 429cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 430cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK2_ (dst, src); 431cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_DISJOINT_P_ (dst->s.bset, src->s.bset); 432cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 433cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 434cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 435cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 436cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_equal_p (bitset dst, bitset src) 437cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 438cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK2_ (dst, src); 439cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_EQUAL_P_ (dst->s.bset, src->s.bset); 440cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 441cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 442cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 443cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 444cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_not (bitset dst, bitset src) 445cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 446cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK2_ (dst, src); 447cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_NOT_ (dst->s.bset, src->s.bset); 448cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 449cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 450cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 451cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 452cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_subset_p (bitset dst, bitset src) 453cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 454cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK2_ (dst, src); 455cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_SUBSET_P_ (dst->s.bset, src->s.bset); 456cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 457cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 458cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 459cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 460cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_and (bitset dst, bitset src1, bitset src2) 461cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 462cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 463cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_AND_ (dst->s.bset, src1->s.bset, src2->s.bset); 464cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 465cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 466cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 467cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 468cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_and_cmp (bitset dst, bitset src1, bitset src2) 469cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 470cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 471cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); 472cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 473cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 474cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 475cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 476cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_andn (bitset dst, bitset src1, bitset src2) 477cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 478cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 479cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_ANDN_ (dst->s.bset, src1->s.bset, src2->s.bset); 480cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 481cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 482cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 483cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 484cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_andn_cmp (bitset dst, bitset src1, bitset src2) 485cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 486cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 487cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_ANDN_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); 488cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 489cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 490cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 491cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 492cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_or (bitset dst, bitset src1, bitset src2) 493cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 494cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 495cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_OR_ (dst->s.bset, src1->s.bset, src2->s.bset); 496cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 497cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 498cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 499cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 500cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_or_cmp (bitset dst, bitset src1, bitset src2) 501cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 502cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 503cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); 504cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 505cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 506cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 507cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 508cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_xor (bitset dst, bitset src1, bitset src2) 509cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 510cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 511cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_XOR_ (dst->s.bset, src1->s.bset, src2->s.bset); 512cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 513cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 514cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 515cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 516cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_xor_cmp (bitset dst, bitset src1, bitset src2) 517cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 518cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK3_ (dst, src1, src2); 519cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_XOR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset); 520cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 521cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 522cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 523cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 524cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_and_or (bitset dst, bitset src1, bitset src2, bitset src3) 525cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 526cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK4_ (dst, src1, src2, src3); 527cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_AND_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); 528cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 529cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 530cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 531cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 532cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_and_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) 533cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 534cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK4_ (dst, src1, src2, src3); 535cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_AND_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); 536cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 537cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 538cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 539cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 540cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_andn_or (bitset dst, bitset src1, bitset src2, bitset src3) 541cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 542cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK4_ (dst, src1, src2, src3); 543cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_ANDN_OR_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); 544cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 545cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 546cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 547cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 548cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_andn_or_cmp (bitset dst, bitset src1, bitset src2, bitset src3) 549cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 550cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK4_ (dst, src1, src2, src3); 551cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_ANDN_OR_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); 552cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 553cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 554cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 555cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 556cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_or_and (bitset dst, bitset src1, bitset src2, bitset src3) 557cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 558cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK4_ (dst, src1, src2, src3); 559cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_OR_AND_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); 560cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 561cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 562cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 563cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bool 564cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_or_and_cmp (bitset dst, bitset src1, bitset src2, bitset src3) 565cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 566cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_CHECK4_ (dst, src1, src2, src3); 567cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_OR_AND_CMP_ (dst->s.bset, src1->s.bset, src2->s.bset, src3->s.bset); 568cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 569cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 570cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 571cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bitset_bindex 572cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_list (bitset bset, bitset_bindex *list, 573cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex num, bitset_bindex *next) 574cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 575cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex count; 576cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex tmp; 577cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex size; 578cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex i; 579cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 580cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project count = BITSET_LIST_ (bset->s.bset, list, num, next); 581cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 582cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_LISTS_INC (bset->s.bset); 583cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 584cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Log histogram of number of set bits. */ 585cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0, tmp = count; tmp; tmp >>= 1, i++) 586cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project continue; 587cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (i >= BITSET_LOG_COUNT_BINS) 588cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project i = BITSET_LOG_COUNT_BINS - 1; 589cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_LIST_COUNTS_INC (bset->s.bset, i); 590cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 591cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Log histogram of number of bits in set. */ 592cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project size = BITSET_SIZE_ (bset->s.bset); 593cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project for (i = 0, tmp = size; tmp; tmp >>= 1, i++) 594cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project continue; 595cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (i >= BITSET_LOG_SIZE_BINS) 596cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project i = BITSET_LOG_SIZE_BINS - 1; 597cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_LIST_SIZES_INC (bset->s.bset, i); 598cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 599cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Histogram of fraction of bits set. */ 600cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project i = size ? (count * BITSET_DENSITY_BINS) / size : 0; 601cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project if (i >= BITSET_DENSITY_BINS) 602cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project i = BITSET_DENSITY_BINS - 1; 603cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_LIST_DENSITY_INC (bset->s.bset, i); 604cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return count; 605cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 606cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 607cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 608cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic bitset_bindex 609cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_list_reverse (bitset bset, bitset_bindex *list, 610cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_bindex num, bitset_bindex *next) 611cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 612cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_LIST_REVERSE_ (bset->s.bset, list, num, next); 613cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 614cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 615cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 616cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstatic void 617cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_free (bitset bset) 618cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 619cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_FREES_INC (bset->s.bset); 620cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_FREE_ (bset->s.bset); 621cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 622cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 623cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 624cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectstruct bitset_vtable bitset_stats_vtable = { 625cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_set, 626cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_reset, 627cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_toggle, 628cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_test, 629cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_resize, 630cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_size, 631cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_count, 632cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_empty_p, 633cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_ones, 634cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_zero, 635cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_copy, 636cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_disjoint_p, 637cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_equal_p, 638cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_not, 639cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_subset_p, 640cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_and, 641cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_and_cmp, 642cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_andn, 643cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_andn_cmp, 644cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_or, 645cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_or_cmp, 646cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_xor, 647cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_xor_cmp, 648cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_and_or, 649cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_and_or_cmp, 650cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_andn_or, 651cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_andn_or_cmp, 652cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_or_and, 653cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_or_and_cmp, 654cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_list, 655cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_list_reverse, 656cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset_stats_free, 657cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS 658cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project}; 659cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 660cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 661cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project/* Return enclosed bitset type. */ 662cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectenum bitset_type 663cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_type_get (bitset bset) 664cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 665cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return BITSET_TYPE_ (bset->s.bset); 666cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 667cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 668cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 669cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectsize_t 670cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_bytes (void) 671cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 672cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return sizeof (struct bitset_stats_struct); 673cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 674cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 675cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 676cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset 677cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Projectbitset_stats_init (bitset bset, bitset_bindex n_bits, enum bitset_type type) 678cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project{ 679cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project size_t bytes; 680cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bitset sbset; 681cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 682cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->b.vtable = &bitset_stats_vtable; 683cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 684cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Disable cache. */ 685cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->b.cindex = 0; 686cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->b.csize = 0; 687cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->b.cdata = 0; 688cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 689cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_NBITS_ (bset) = n_bits; 690cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 691cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project /* Set up the actual bitset implementation that 692cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project we are a wrapper over. */ 693cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project switch (type) 694cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project { 695cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project default: 696cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abort (); 697cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 698cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_ARRAY: 699cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = abitset_bytes (n_bits); 700cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project sbset = xcalloc (1, bytes); 701cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project abitset_init (sbset, n_bits); 702cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 703cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 704cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_LIST: 705cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = lbitset_bytes (n_bits); 706cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project sbset = xcalloc (1, bytes); 707cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project lbitset_init (sbset, n_bits); 708cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 709cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 710cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_TABLE: 711cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = ebitset_bytes (n_bits); 712cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project sbset = xcalloc (1, bytes); 713cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project ebitset_init (sbset, n_bits); 714cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 715cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 716cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project case BITSET_VARRAY: 717cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bytes = vbitset_bytes (n_bits); 718cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project sbset = xcalloc (1, bytes); 719cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project vbitset_init (sbset, n_bits); 720cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project break; 721cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project } 722cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 723cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project bset->s.bset = sbset; 724cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 725cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project BITSET_STATS_ALLOCS_INC (type); 726cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project 727cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project return bset; 728cea198a11f15a2eb071d98491ca9a8bc8cebfbc4The Android Open Source Project} 729