mirror of
https://github.com/Z3Prover/z3
synced 2025-04-16 05:48:44 +00:00
63 lines
1.5 KiB
C++
63 lines
1.5 KiB
C++
/*++
|
|
Copyright (c) 2011 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
act_cache.h
|
|
|
|
Abstract:
|
|
|
|
expr -> expr activity cache
|
|
It maintains at most N unused entries
|
|
|
|
Author:
|
|
|
|
Leonardo (leonardo) 2011-04-12
|
|
|
|
Notes:
|
|
|
|
--*/
|
|
#pragma once
|
|
|
|
#include "ast/ast.h"
|
|
#include "util/obj_hashtable.h"
|
|
#include "util/chashtable.h"
|
|
|
|
class act_cache {
|
|
ast_manager & m_manager;
|
|
typedef std::pair<expr*, unsigned> entry_t;
|
|
struct entry_hash {
|
|
unsigned operator()(entry_t const& e) const {
|
|
return e.first->hash() + e.second;
|
|
}
|
|
};
|
|
typedef cmap<entry_t, expr*, entry_hash, default_eq<entry_t> > map;
|
|
map m_table;
|
|
svector<entry_t> m_queue; // recently created queue
|
|
unsigned m_qhead;
|
|
unsigned m_unused;
|
|
unsigned m_max_unused;
|
|
|
|
void compress_queue();
|
|
void init();
|
|
void dec_refs();
|
|
void del_unused();
|
|
|
|
public:
|
|
act_cache(ast_manager & m);
|
|
act_cache(ast_manager & m, unsigned max_unused);
|
|
~act_cache();
|
|
void insert(expr * k, expr * v) { insert(k, 0, v); }
|
|
expr * find(expr * k) { return find(k, 0); }
|
|
void insert(expr * k, unsigned offset, expr * v);
|
|
expr * find(expr * k, unsigned offset);
|
|
void reset();
|
|
void cleanup();
|
|
unsigned size() const { return m_table.size(); }
|
|
unsigned capacity() const { return m_table.capacity(); }
|
|
bool empty() const { return m_table.empty(); }
|
|
bool check_invariant() const;
|
|
|
|
};
|
|
|