#pragma once #include #include #include class Gate { public: int topo; std::string name; enum Type { AND, NAND, OR, NOR, XOR, XNOR, NOT, BUF, INPUT, OUTPUT } type; int value; std::vector outputs; std::vector inputs; }; class Fault { public: Gate* gate; enum Type { SA0, SA1 } type; Fault(Gate* gate, Type type):gate(gate),type(type) {} }; class Circuit { public: std::vector PIs; std::vector POs; std::vector gates; std::vector stems;// PI + stems std::unordered_map name2gate; void parse_from_file(const char *filename); int cal_gate_value(const Gate* &gate); void init_topo_index(); void init_stems(); // local search std::vector local_search(const std::vector &faults); void ls_init_circuit(); void ls_init_vector(std::vector *vec); };