From 188da7e4c6813ca182a56695bf50f622aa640d87 Mon Sep 17 00:00:00 2001 From: Leonardo de Moura Date: Tue, 22 Apr 2014 18:30:07 -0700 Subject: [PATCH] feat(kernel/max_sharing): add method already_processed Signed-off-by: Leonardo de Moura --- src/kernel/max_sharing.cpp | 7 +++++++ src/kernel/max_sharing.h | 7 ++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/kernel/max_sharing.cpp b/src/kernel/max_sharing.cpp index 724343c421..9945850f09 100644 --- a/src/kernel/max_sharing.cpp +++ b/src/kernel/max_sharing.cpp @@ -48,13 +48,20 @@ struct max_sharing_fn::imp { m_cache.insert(a); return res; } + expr operator()(expr const & a) { return apply(a); } + + bool already_processed(expr const & a) const { + auto r = m_cache.find(a); + return r != m_cache.end() && is_eqp(*r, a); + } }; max_sharing_fn::max_sharing_fn():m_ptr(new imp) {} max_sharing_fn::~max_sharing_fn() {} expr max_sharing_fn::operator()(expr const & a) { return (*m_ptr)(a); } void max_sharing_fn::clear() { m_ptr->m_cache.clear(); } +bool max_sharing_fn::already_processed(expr const & a) const { return m_ptr->already_processed(a); } expr max_sharing(expr const & a) { return max_sharing_fn::imp()(a); diff --git a/src/kernel/max_sharing.h b/src/kernel/max_sharing.h index 0fef2f9cfb..da31080ad1 100644 --- a/src/kernel/max_sharing.h +++ b/src/kernel/max_sharing.h @@ -23,9 +23,10 @@ public: expr operator()(expr const & a); - /** - \brief Clear the cache. - */ + /** \brief Return true iff \c a was already processed by this object. */ + bool already_processed(expr const & a) const; + + /** \brief Clear the cache. */ void clear(); };