#pragma once
#include "ast/ast.h"
#include "util/obj_hashtable.h"
class num_occurs {
protected:
bool m_ignore_ref_count1;
bool m_ignore_quantifiers;
obj_map<expr, unsigned> m_num_occurs;
void process(expr * t, expr_fast_mark1 & visited);
public:
num_occurs(bool ignore_ref_count1 = false, bool ignore_quantifiers = false):
m_ignore_ref_count1(ignore_ref_count1),
m_ignore_quantifiers(ignore_quantifiers) {
}
virtual ~num_occurs() = default;
void validate();
virtual void reset() { m_num_occurs.reset(); }
void operator()(expr * t);
void operator()(unsigned num, expr * const * ts);
unsigned get_num_occs(expr * n) const {
unsigned val;
if (m_num_occurs.find(n, val))
return val;
return 0;
}
};