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); |
+ } |
+ } |
+} |