Definition in file types.c.
Go to the source code of this file.
Data Structures | |
| struct | zom_t |
| Bit-parallel arithmetic on numbers 0, 1, more. More... | |
| struct | input_t |
| Input. More... | |
| struct | output_t |
| Output. More... | |
| struct | bounds_t |
| Bounds for values. More... | |
Defines | |
| #define | VERSION "2007-05-15" |
| Version number. | |
| #define | YEAR "2007" |
| Year for the copyright. | |
| #define | LEVELS_LIST 0.0001, 0.001, 0.01, 0.05, 0.10 |
| The significance levels to report. | |
| #define | WORD_BITS 32 |
| The size of the words that are used to store the bit vectors. | |
| #define | BITCOUNT_BITS 11 |
| The size of the precomputed arrays of bit counts. | |
| #define | WORD_ONE UINT32_C(1) |
| Value 1 in the type word_t. | |
| #define | MSB_SHIFT 5 |
| Base-2 logarithm of WORD_BITS. | |
| #define | LSB_MASK ((WORD_ONE << MSB_SHIFT) - WORD_ONE) |
| A bitmask for extracting the least significant bits of an index. | |
| #define | STRINGIFY2(x) #x |
| Used to implement STRINGIFY. | |
| #define | STRINGIFY(x) STRINGIFY2(x) |
| Stringify x. | |
| #define | MIN(x, y) ((x) < (y) ? (x) : (y)) |
| Minimum of x and y. | |
| #define | MAX(x, y) ((x) > (y) ? (x) : (y)) |
| Maximum of x and y. | |
| #define | MYMALLOC(target, type, count) |
| Allocate count elements of type type and store the pointer to target. | |
| #define | MYMALLOCZ(target, type, count, init) |
| Allocate count elements of type type, initialise each element to init, and store the pointer to target. | |
| #define | MYMALLOC2Z(target, type, count1, count2, init) MYMALLOCZ(target, type, size_multiply(count1, count2), init) |
| Allocate count1 times count2 elements of type type, initialise each element to init, and store the pointer to target. | |
| #define | BUILTIN_RNG_BITS 15 |
| The number of random bits returned by builtin_rng. | |
| #define | BUILTIN_RNG_MAX ((1U << BUILTIN_RNG_BITS) - 1) |
| The maximum value returned by builtin_rng. | |
| #define | BUILTIN_RNG_LARGE_BITS (BUILTIN_RNG_BITS * 2) |
| The number of random bits returned by builtin_rng_large. | |
| #define | BUILTIN_RNG_LARGE_MAX ((1U << BUILTIN_RNG_LARGE_BITS) - 1) |
| The maximum value returned by builtin_rng_large. | |
| #define | DEF_CALCULATE_STATISTICS(suffix, representation) |
| A macro for constructing calculate_statistics_normal and calculate_statistics_hapax. | |
| #define | DEF_CALCULATE_RAW_DATA(suffix, representation) |
| A macro for constructing calculate_raw_data_normal and calculate_raw_data_hapax. | |
| #define | NLEVELS (sizeof LEVELS / sizeof LEVELS[0]) |
| The number of elements in LEVELS. | |
Typedefs | |
| typedef unsigned | bitcount_t |
| The type which is used to store the bit counts. | |
| typedef uint_fast32_t | word_t |
| The type which is used to store the bit vectors. | |
| typedef uint_fast32_t | builtin_rng_state_t |
| The internal state of builtin_rng. | |
Functions | |
| static size_t | get_msb_index (size_t i) |
| Get the most significant bits of the index i. | |
| static word_t | get_lsb_bit (size_t i) |
| Get the least significant bits of the index i. | |
| static size_t | size_multiply (size_t a, size_t b) |
| Multiply a by b; exit with failure if an overflow occurs. | |
| static void * | mymalloc (size_t s) |
| Allocate s bytes; exit with failure if out of memory. | |
| static void | myfscanf (int expected, const char *description, FILE *stream, const char *format,...) |
A wrapper of fscanf. | |
| static void | bad_uint (const char *s) |
| Report an error; exit with failure. | |
| static unsigned | get_uint (const char *s) |
| Parse an unsigned integer in the string s; exit with failure if unsuccessful. | |
| static void | builtin_rng_init (builtin_rng_state_t *state) |
| Initialise the state used by builtin_rng. | |
| static uint_fast16_t | builtin_rng (builtin_rng_state_t *state) |
| Builtin pseudorandom number generator. | |
| static uint_fast32_t | builtin_rng_large (builtin_rng_state_t *state) |
| Builtin pseudorandom number generator. | |
| static unsigned | builtin_rng_n (builtin_rng_state_t *state, unsigned n) |
Return a random unsigned integer between 0 and n-1. | |
| static unsigned | myrand_n (unsigned n) |
Return a random unsigned integer between 0 and n-1. | |
| static void | myswap (unsigned i, unsigned j, unsigned *restrict table) |
| Swap i and j in table. | |
| static void | identity_permutation (unsigned n, unsigned *restrict table) |
| Store the identity permutation of n elements into table. | |
| static void | rand_permutation (unsigned n, unsigned *restrict table) |
| Store a random permutation of n elements into table. | |
| static void | builtin_rng_permutation (builtin_rng_state_t *restrict state, unsigned n, unsigned *restrict table) |
| Store a random permutation of n elements into table. | |
| static unsigned | naive_bitcount (unsigned w) |
| Compute the number of ones in the binary representation of w. | |
| static void | init_bitcount (void) |
| Initialise the array bitcount. | |
| static unsigned | bitcount (word_t w) |
| Compute the number of ones in the binary representation of w. | |
| static zom_t | zom_add (zom_t x, zom_t y) |
| Calculate x + y in zom_t. | |
| static word_t | zom_exactly_1 (zom_t x) |
| Return a bit vector where a bit is set if the value is exactly 1. | |
| static void | word_clear (word_t *restrict array, size_t n) |
| Zero an array of word_t. | |
| static void | zom_clear (zom_t *restrict array, size_t n) |
| Zero an array of zom_t. | |
| static void | usage (const char *name) |
| Print documentation and exit. | |
| static void | version (void) |
| Print version information and exit. | |
| static void | parse_command_line (input_t *restrict pinput, int argc, char **argv) |
| Parse the command line. | |
| static void | process_input (input_t *restrict pinput) |
| Read the input file. | |
| static void | free_input (const input_t *pinput) |
| Frees the memory allocated for the fields of input_t. | |
| static void | prepare_slots (input_t *restrict pinput, output_t *restrict poutput) |
| Prepare output_t::slot_threshold. | |
| static void | next_permutation (builtin_rng_state_t *restrict rng_state, const input_t *pinput, unsigned *restrict sample_order) |
| Construct the next permutation in sample_order, based on the user's choice on how to compute the permutations. | |
| static void | calculate_bounds_normal (const input_t *pinput, unsigned sample, word_t *restrict accum, unsigned *restrict p_accum_types, bounds_t *restrict pb_sample) |
| Process the sample number sample. Update type accumulation vector accum and type accumulation count in p_accum_types. Calculate type accumulation bounds for this sample and store the result in pb_sample. | |
| static void | calculate_bounds_hapax (const input_t *pinput, unsigned sample, zom_t *restrict accum, unsigned *restrict p_accum_hapaxes, bounds_t *restrict pb_sample) |
| Process the sample number sample. Update hapax accumulation vector accum and hapax accumulation count in p_accum_hapaxes. Calculate hapax accumulation bounds for this sample and store the result in pb_sample. | |
| static void | update_bounds_normal (bounds_t *restrict pb_this_gap, const bounds_t *pb_sample) |
| Use the bounds for this sample in pb_sample and use it to update the bounds for this gap in pg_this_gap. | |
| static void | update_bounds_hapax (bounds_t *restrict pb_this_gap, const bounds_t *pb_sample) |
| Use the bounds for this sample in pb_sample and use it to update the bounds for this gap in pg_this_gap. | |
| static void | record (unsigned slots, const output_t *poutput, bounds_t b_slot, unsigned current_slot) |
| Store new per-slot bounds. | |
| static void | record_normal (unsigned slots, const output_t *poutput, bounds_t b_prev_gap, bounds_t b_this_gap, unsigned current_slot) |
| Store new per-slot bounds based on per-gap bounds. | |
| static void | record_hapax (unsigned slots, const output_t *poutput, bounds_t b_prev_gap, bounds_t b_this_gap, unsigned current_slot) |
| Store new per-slot bounds based on per-gap bounds. | |
| static void | calculate_statistics_normal (const input_t *restrict pinput, const output_t *poutput) |
| Calculate the bounds for type accumulation. | |
| static void | calculate_statistics_hapax (const input_t *restrict pinput, const output_t *poutput) |
| Calculate the bounds for hapax accumulation. | |
| static void | calculate_statistics (const input_t *pinput, output_t *restrict poutput) |
| Calculate the bounds for type or hapax accumulation. | |
| static void | free_output (const output_t *poutput) |
| Frees the memory allocated for the fields of output_t. | |
| static void | print_raw_data (unsigned accum_items, unsigned accum_value) |
| Print a row of raw data. | |
| static void | calculate_raw_data_normal (const input_t *pinput) |
| Print raw data for type accumulation. | |
| static void | calculate_raw_data_hapax (const input_t *pinput) |
| Print raw data for hapax accumulation. | |
| static void | calculate_raw_data (const input_t *pinput) |
| Print raw data for type or hapax accumulation. | |
| static void | print_row (unsigned slot_threshold, const unsigned *lower_bounds, const unsigned *upper_bounds) |
| Prints a row of output. | |
| static void | print_result (const input_t *pinput, const output_t *poutput) |
| Prints the results. | |
| int | main (int argc, char **argv) |
| Main program. | |
Variables | |
| static bitcount_t | bitcounts [1U<< BITCOUNT_BITS] |
| A lookup table where precomputed bit counts are stored. | |
| const double | LEVELS [] = { LEVELS_LIST } |
| The significance levels to report. | |