| 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
|
|
|
|
|