Branch data Line data Source code
1 : : // $Id: EquivClass.h 6219 2008-10-01 05:39:07Z vern $
2 : : //
3 : : // See the file "COPYING" in the main distribution directory for copyright.
4 : :
5 : : #ifndef equiv_class_h
6 : : #define equiv_class_h
7 : :
8 : : #include <stdio.h>
9 : :
10 : : #include "CCL.h"
11 : :
12 : : class EquivClass {
13 : : public:
14 : : EquivClass(int size);
15 : : ~EquivClass();
16 : :
17 : : void UniqueChar(int sym);
18 : : void CCL_Use(CCL* ccl);
19 : :
20 : : // All done adding character usage info - generate equivalence
21 : : // classes. Returns number of classes.
22 : : int BuildECs();
23 : :
24 : : void ConvertCCL(CCL* ccl);
25 : :
26 : 32107 : int IsRep(int sym) const { return rep[sym] == sym; }
27 : 1438 : int EquivRep(int sym) const { return rep[sym]; }
28 : 28053 : int SymEquivClass(int sym) const { return equiv_class[sym]; }
29 : 444 : int* EquivClasses() const { return equiv_class; }
30 : :
31 : : int NumSyms() const { return size; }
32 : 1164 : int NumClasses() const { return num_ecs; }
33 : :
34 : : void Dump(FILE* f);
35 : : int Size() const;
36 : :
37 : : protected:
38 : : int size; // size of character set
39 : : int num_ecs; // size of equivalence classes
40 : : int* fwd; // forward list of different classes
41 : : int* bck; // backward list
42 : : int* equiv_class; // symbol's equivalence class
43 : : int* rep; // representative for symbol's equivalence class
44 : : int* ccl_flags;
45 : : int ec_nil, no_class, no_rep;
46 : : };
47 : :
48 : : #endif
|