/* -*-C-*- ******************************************************************************** * * File: tally.h (Formerly tally.h) * Description: * Author: Mark Seaman, SW Productivity * Created: Fri Oct 16 14:37:00 1987 * Modified: Wed Apr 10 10:45:41 1991 (Mark Seaman) marks@hpgrlt * Language: C * Package: N/A * Status: Reusable Software Component * * (c) Copyright 1987, Hewlett-Packard Company. ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** http://www.apache.org/licenses/LICENSE-2.0 ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. * *********************************************************************************/ #ifndef TALLY_H #define TALLY_H /*---------------------------------------------------------------------- I n c l u d e s ----------------------------------------------------------------------*/ #include /*---------------------------------------------------------------------- T y p e s ----------------------------------------------------------------------*/ typedef struct _TALLY_ { int count; int num_buckets; int buckets[1]; } *TALLY; /*---------------------------------------------------------------------- M a c r o s ----------------------------------------------------------------------*/ /********************************************************************** * inc_tally_bucket * * Increment the bucket count for the chosen bucket. **********************************************************************/ #define inc_tally_bucket(t,i) \ (t->count++, \ ((i < t->num_buckets) ? \ (t->buckets[i]++) : \ (t->buckets[t->num_buckets-1]++))) /********************************************************************** * iterate_tally * * Iterate through all the buckets in a tally record. **********************************************************************/ #define iterate_tally(t,i) \ for (i=0; inum_buckets; i++) /********************************************************************** * tally_entry * * Access one of the buckets of a tally record without bounds checking. **********************************************************************/ #define tally_entry(t,i) \ (t->buckets[i]) /********************************************************************** * tally_value * * Access one of the buckets of a tally record with bounds checking. ********************************************************************** #define tally_value(t,i) \ ((i>=0 && inum_buckets) ? \ (tally_entry (t,i)) : \ (cprintf ("error: tried to access non-existant bucket %d\n", i))) */ /*---------------------------------------------------------------------- F u n c t i o n s ----------------------------------------------------------------------*/ TALLY new_tally(int num_buckets); void print_tally(FILE *file, const char *string, TALLY t); #endif