| Index: gperf/src/gperf/3.0.1/gperf-3.0.1-src/src/bool-array.icc
|
| ===================================================================
|
| --- gperf/src/gperf/3.0.1/gperf-3.0.1-src/src/bool-array.icc (revision 0)
|
| +++ gperf/src/gperf/3.0.1/gperf-3.0.1-src/src/bool-array.icc (revision 0)
|
| @@ -0,0 +1,78 @@
|
| +/* Inline Functions for bool-array.{h,cc}.
|
| +
|
| + Copyright (C) 1989-1998, 2002 Free Software Foundation, Inc.
|
| + Written by Douglas C. Schmidt <schmidt@ics.uci.edu>
|
| + and Bruno Haible <bruno@clisp.org>.
|
| +
|
| + This file is part of GNU GPERF.
|
| +
|
| + GNU GPERF is free software; you can redistribute it and/or modify
|
| + it under the terms of the GNU General Public License as published by
|
| + the Free Software Foundation; either version 2, or (at your option)
|
| + any later version.
|
| +
|
| + GNU GPERF is distributed in the hope that it will be useful,
|
| + but WITHOUT ANY WARRANTY; without even the implied warranty of
|
| + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
| + GNU General Public License for more details.
|
| +
|
| + You should have received a copy of the GNU General Public License
|
| + along with this program; see the file COPYING.
|
| + If not, write to the Free Software Foundation, Inc.,
|
| + 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
| +
|
| +// This needs:
|
| +//#include <stdio.h>
|
| +//#include <string.h>
|
| +//#include "options.h"
|
| +
|
| +/* Initializes the bit array with room for SIZE bits, numbered from
|
| + 0 to SIZE-1. */
|
| +INLINE
|
| +Bool_Array::Bool_Array (unsigned int size)
|
| + : _size (size),
|
| + _iteration_number (1),
|
| + _storage_array (new unsigned int [size])
|
| +{
|
| + memset (_storage_array, 0, size * sizeof (_storage_array[0]));
|
| + if (option[DEBUG])
|
| + fprintf (stderr, "\nbool array size = %d, total bytes = %d\n",
|
| + _size,
|
| + static_cast<unsigned int> (_size * sizeof (_storage_array[0])));
|
| +}
|
| +
|
| +/* Sets the specified bit to true.
|
| + Returns its previous value (false or true). */
|
| +INLINE bool
|
| +Bool_Array::set_bit (unsigned int index)
|
| +{
|
| + if (_storage_array[index] == _iteration_number)
|
| + /* The bit was set since the last clear() call. */
|
| + return true;
|
| + else
|
| + {
|
| + /* The last operation on this bit was clear(). Set it now. */
|
| + _storage_array[index] = _iteration_number;
|
| + return false;
|
| + }
|
| +}
|
| +
|
| +/* Resets all bits to zero. */
|
| +INLINE void
|
| +Bool_Array::clear ()
|
| +{
|
| + /* If we wrap around it's time to zero things out again! However, this only
|
| + occurs once about every 2^32 iterations, so it will not happen more
|
| + frequently than once per second. */
|
| +
|
| + if (++_iteration_number == 0)
|
| + {
|
| + _iteration_number = 1;
|
| + memset (_storage_array, 0, _size * sizeof (_storage_array[0]));
|
| + if (option[DEBUG])
|
| + {
|
| + fprintf (stderr, "(re-initialized bool_array)\n");
|
| + fflush (stderr);
|
| + }
|
| + }
|
| +}
|
|
|