zeek/src/EquivClass.h
Benjamin Bannier f5a76c1aed Reformat Zeek in Spicy style
This largely copies over Spicy's `.clang-format` configuration file. The
one place where we deviate is header include order since Zeek depends on
headers being included in a certain order.
2023-10-30 09:40:55 +01:00

47 lines
1.2 KiB
C++

// See the file "COPYING" in the main distribution directory for copyright.
#pragma once
#include <stdio.h>
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