3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-07 18:05:21 +00:00
z3/lib/obj_mark.h
Leonardo de Moura e9eab22e5c Z3 sources
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
2012-10-02 11:35:25 -07:00

54 lines
1.3 KiB
C++

/*++
Copyright (c) 2006 Microsoft Corporation
Module Name:
obj_mark.h
Abstract:
A mapping from object to boolean (for objects that can be mapped to unsigned integers).
Author:
Leonardo de Moura (leonardo) 2008-01-02.
Revision History:
--*/
#ifndef _OBJ_MARK_H_
#define _OBJ_MARK_H_
#include"bit_vector.h"
template<typename T>
struct default_t2uint {
unsigned operator()(T const & obj) const { return obj.get_id(); }
};
template<typename T, typename BV = bit_vector, typename T2UInt = default_t2uint<T> >
class obj_mark {
T2UInt m_proc;
BV m_marks;
public:
obj_mark(T2UInt const & p = T2UInt()):m_proc(p) {}
bool is_marked(T const & obj) const {
unsigned id = m_proc(obj);
return id < m_marks.size() && m_marks.get(id);
}
bool is_marked(T * obj) const { return is_marked(*obj); }
void mark(T const & obj, bool flag) {
unsigned id = m_proc(obj);
if (id >= m_marks.size()) {
m_marks.resize(id+1, 0);
}
m_marks.set(id, flag);
}
void mark(T const * obj, bool flag) { mark(*obj, flag); }
void mark(T const & obj) { mark(obj, true); }
void mark(T const * obj) { mark(obj, true); }
void reset() { m_marks.reset(); }
};
#endif /* _OBJ_MARK_H_ */