mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
47 lines
1.2 KiB
C++
47 lines
1.2 KiB
C++
// See the file "COPYING" in the main distribution directory for copyright.
|
|
|
|
#pragma once
|
|
|
|
#include <cstdio>
|
|
|
|
namespace zeek::detail {
|
|
|
|
class CCL;
|
|
|
|
class EquivClass {
|
|
public:
|
|
explicit 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);
|
|
|
|
bool 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;
|
|
};
|
|
|
|
} // namespace zeek::detail
|