// See the file "COPYING" in the main distribution directory for copyright. #ifndef equiv_class_h #define equiv_class_h #include #include "CCL.h" class EquivClass { public: EquivClass(int size); ~EquivClass(); void UniqueChar(int sym); void CCL_Use(CCL* ccl); // All done adding character usage info - generate equivalence // classes. Returns number of classes. int BuildECs(); void ConvertCCL(CCL* ccl); int IsRep(int sym) const { return rep[sym] == sym; } int EquivRep(int sym) const { return rep[sym]; } int SymEquivClass(int sym) const { return equiv_class[sym]; } int* EquivClasses() const { return equiv_class; } int NumSyms() const { return size; } int NumClasses() const { return num_ecs; } void Dump(FILE* f); int Size() const; protected: int size; // size of character set int num_ecs; // size of equivalence classes int* fwd; // forward list of different classes int* bck; // backward list int* equiv_class; // symbol's equivalence class int* rep; // representative for symbol's equivalence class int* ccl_flags; int ec_nil, no_class, no_rep; }; #endif