| Index: gperf/src/gperf/3.0.1/gperf-3.0.1-src/src/positions.h |
| =================================================================== |
| --- gperf/src/gperf/3.0.1/gperf-3.0.1-src/src/positions.h (revision 0) |
| +++ gperf/src/gperf/3.0.1/gperf-3.0.1-src/src/positions.h (revision 0) |
| @@ -0,0 +1,171 @@ |
| +/* This may look like C code, but it is really -*- C++ -*- */ |
| + |
| +/* A set of byte positions. |
| + |
| + Copyright (C) 1989-1998, 2000, 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. */ |
| + |
| +#ifndef positions_h |
| +#define positions_h 1 |
| + |
| +/* This class denotes a set of byte positions, used to access a keyword. */ |
| + |
| +class Positions |
| +{ |
| + friend class PositionIterator; |
| + friend class PositionReverseIterator; |
| +public: |
| + /* Denotes the last char of a keyword, depending on the keyword's length. */ |
| + enum { LASTCHAR = -1 }; |
| + |
| + /* Maximum key position specifiable by the user, 1-based. |
| + Note that MAX_KEY_POS-1 must fit into the element type of _positions[], |
| + below. */ |
| + enum { MAX_KEY_POS = 255 }; |
| + |
| + /* Maximum possible size. Since duplicates are eliminated and the possible |
| + 0-based positions are -1 .. MAX_KEY_POS-1, this is: */ |
| + enum { MAX_SIZE = MAX_KEY_POS + 1 }; |
| + |
| + /* Constructors. */ |
| + Positions (); |
| + Positions (int pos1); |
| + Positions (int pos1, int pos2); |
| + |
| + /* Copy constructor. */ |
| + Positions (const Positions& src); |
| + |
| + /* Assignment operator. */ |
| + Positions& operator= (const Positions& src); |
| + |
| + /* Accessors. */ |
| + bool is_useall () const; |
| + int operator[] (unsigned int index) const; |
| + unsigned int get_size () const; |
| + |
| + /* Write access. */ |
| + void set_useall (bool useall); |
| + int * pointer (); |
| + void set_size (unsigned int size); |
| + |
| + /* Sorts the array in reverse order. |
| + Returns true if there are no duplicates, false otherwise. */ |
| + bool sort (); |
| + |
| + /* Creates an iterator, returning the positions in descending order. */ |
| + PositionIterator iterator () const; |
| + /* Creates an iterator, returning the positions in descending order, |
| + that apply to strings of length <= maxlen. */ |
| + PositionIterator iterator (int maxlen) const; |
| + /* Creates an iterator, returning the positions in ascending order. */ |
| + PositionReverseIterator reviterator () const; |
| + /* Creates an iterator, returning the positions in ascending order, |
| + that apply to strings of length <= maxlen. */ |
| + PositionReverseIterator reviterator (int maxlen) const; |
| + |
| + /* Set operations. Assumes the array is in reverse order. */ |
| + bool contains (int pos) const; |
| + void add (int pos); |
| + void remove (int pos); |
| + |
| + /* Output in external syntax. */ |
| + void print () const; |
| + |
| +private: |
| + /* The special case denoted by '*'. */ |
| + bool _useall; |
| + /* Number of positions. */ |
| + unsigned int _size; |
| + /* Array of positions. 0 for the first char, 1 for the second char etc., |
| + LASTCHAR for the last char. */ |
| + int _positions[MAX_SIZE]; |
| +}; |
| + |
| +/* This class denotes an iterator through a set of byte positions. */ |
| + |
| +class PositionIterator |
| +{ |
| + friend class Positions; |
| +public: |
| + /* Copy constructor. */ |
| + PositionIterator (const PositionIterator& src); |
| + |
| + /* End of iteration marker. */ |
| + enum { EOS = -2 }; |
| + |
| + /* Retrieves the next position, or EOS past the end. */ |
| + int next (); |
| + |
| + /* Returns the number of remaining positions, i.e. how often next() will |
| + return a value != EOS. */ |
| + unsigned int remaining () const; |
| + |
| +private: |
| + /* Initializes an iterator through POSITIONS. */ |
| + PositionIterator (Positions const& positions); |
| + /* Initializes an iterator through POSITIONS, ignoring positions >= maxlen. */ |
| + PositionIterator (Positions const& positions, int maxlen); |
| + |
| + const Positions& _set; |
| + unsigned int _index; |
| +}; |
| + |
| +/* This class denotes an iterator in reverse direction through a set of |
| + byte positions. */ |
| + |
| +class PositionReverseIterator |
| +{ |
| + friend class Positions; |
| +public: |
| + /* Copy constructor. */ |
| + PositionReverseIterator (const PositionReverseIterator& src); |
| + |
| + /* End of iteration marker. */ |
| + enum { EOS = -2 }; |
| + |
| + /* Retrieves the next position, or EOS past the end. */ |
| + int next (); |
| + |
| + /* Returns the number of remaining positions, i.e. how often next() will |
| + return a value != EOS. */ |
| + unsigned int remaining () const; |
| + |
| +private: |
| + /* Initializes an iterator through POSITIONS. */ |
| + PositionReverseIterator (Positions const& positions); |
| + /* Initializes an iterator through POSITIONS, ignoring positions >= maxlen. */ |
| + PositionReverseIterator (Positions const& positions, int maxlen); |
| + |
| + const Positions& _set; |
| + unsigned int _index; |
| + unsigned int _minindex; |
| +}; |
| + |
| +#ifdef __OPTIMIZE__ |
| + |
| +#include <string.h> |
| +#define INLINE inline |
| +#include "positions.icc" |
| +#undef INLINE |
| + |
| +#endif |
| + |
| +#endif |
| |
| Property changes on: gperf\src\gperf\3.0.1\gperf-3.0.1-src\src\positions.h |
| ___________________________________________________________________ |
| Added: svn:eol-style |
| + LF |
| |
| |