/usr/include/lttoolbox-3.1/lttoolbox/alphabet.h is in liblttoolbox3-3.1-0-dev 3.1.0-1.1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | /*
* Copyright (C) 2005 Universitat d'Alacant / Universidad de Alicante
*
* This program 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 of the
* License, or (at your option) any later version.
*
* This program 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; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
* 02111-1307, USA.
*/
#ifndef _ALPHABET_
#define _ALPHABET_
#include <cstdio>
#include <list>
#include <map>
#include <vector>
#include <lttoolbox/ltstr.h>
using namespace std;
/**
* Alphabet class.
* Encodes pairs of symbols into an integer.
*/
class Alphabet
{
private:
/**
* Symbol-identifier relationship.
* @see slexicinv
*/
map<wstring, int, Ltstr> slexic;
/**
* Identifier-symbol relationship.
* @see slexic
*/
vector<wstring> slexicinv;
map<pair<int,int>, int> spair;
vector<pair<int, int> > spairinv;
void copy(Alphabet const &a);
void destroy();
public:
/**
* Constructor.
*/
Alphabet();
/**
* Destructor.
*/
~Alphabet();
/**
* Copy constructor.
*/
Alphabet(Alphabet const &a);
/**
* Assign operator.
*/
Alphabet & operator = (Alphabet const &a);
/**
* Include a symbol into the alphabet.
*/
void includeSymbol(wstring const &s);
/**
* Get an unique code for every symbol pair. This flavour is for
* character pairs.
* @param c1 left symbol.
* @param c2 right symbol.
* @return code for (c1, c2).
*/
int operator()(int const c1, int const c2);
/**
* Gets the individual symbol identifier.
* @param s symbol to be identified.
* @return symbol identifier.
*/
int operator()(wstring const &s);
/**
* Check wether the symbol is defined in the alphabet.
* @param s symbol
* @return true if defined
*/
bool isSymbolDefined(wstring const &s);
/**
* Returns the size of the alphabet (number of symbols).
* @return number of symbols.
*/
int size() const;
/**
* Write method.
* @param output output stream.
*/
void write(FILE *output);
/**
* Read method.
* @param input input stream.
*/
void read(FILE *input);
/**
* Write a symbol enclosed by angle brackets in the output stream.
* @param symbol symbol code.
* @param output output stream.
*/
void writeSymbol(int const symbol, FILE *output) const;
/**
* Concat a symbol in the string that is passed by reference.
* @param result string where the symbol should be concatenated
* @param symbol code of the symbol
* @param uppercase true if we want an uppercase symbol
*/
void getSymbol(wstring &result, int const symbol,
bool uppercase = false) const;
/**
* Checks whether a symbol is a tag or not
* @param symbol the code of the symbol
* @return true if the symbol is a tag
*/
bool isTag(int const symbol) const;
pair<int, int> const & decode(int const code) const;
};
#endif
|