/* Copyright (c) 2015 Microsoft Corporation. All rights reserved. Released under Apache 2.0 license as described in the file LICENSE. Author: Leonardo de Moura */ #include "kernel/expr_cache.h" namespace lean { expr * expr_cache::find(expr const & e) { unsigned i = hash(e) % m_capacity; if (m_cache[i].m_expr && is_bi_equal(*m_cache[i].m_expr, e)) return &m_cache[i].m_result; else return nullptr; } void expr_cache::insert(expr const & e, expr const & v) { unsigned i = hash(e) % m_capacity; if (!m_cache[i].m_expr) m_used.push_back(i); m_cache[i].m_expr = e; m_cache[i].m_result = v; } void expr_cache::clear() { for (unsigned i : m_used) { m_cache[i].m_expr = none_expr(); m_cache[i].m_result = expr(); } m_used.clear(); } }