feat(library): add shared environment object
Signed-off-by: Leonardo de Moura <leonardo@microsoft.com>
This commit is contained in:
parent
3726688711
commit
dd3edcb19f
3 changed files with 74 additions and 1 deletions
|
@ -1,6 +1,7 @@
|
||||||
add_library(library deep_copy.cpp expr_lt.cpp io_state.cpp occurs.cpp
|
add_library(library deep_copy.cpp expr_lt.cpp io_state.cpp occurs.cpp
|
||||||
kernel_bindings.cpp io_state_stream.cpp bin_app.cpp
|
kernel_bindings.cpp io_state_stream.cpp bin_app.cpp
|
||||||
resolve_macro.cpp kernel_serializer.cpp max_sharing.cpp normalize.cpp)
|
resolve_macro.cpp kernel_serializer.cpp max_sharing.cpp
|
||||||
|
normalize.cpp shared_environment.cpp)
|
||||||
# placeholder.cpp fo_unify.cpp hop_match.cpp)
|
# placeholder.cpp fo_unify.cpp hop_match.cpp)
|
||||||
|
|
||||||
target_link_libraries(library ${LEAN_LIBS})
|
target_link_libraries(library ${LEAN_LIBS})
|
||||||
|
|
32
src/library/shared_environment.cpp
Normal file
32
src/library/shared_environment.cpp
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
||||||
|
Released under Apache 2.0 license as described in the file LICENSE.
|
||||||
|
|
||||||
|
Author: Leonardo de Moura
|
||||||
|
*/
|
||||||
|
#include "library/shared_environment.h"
|
||||||
|
|
||||||
|
namespace lean {
|
||||||
|
shared_environment::shared_environment() {}
|
||||||
|
shared_environment::shared_environment(environment const & env):m_env(env) {}
|
||||||
|
|
||||||
|
environment shared_environment::get_environment() const {
|
||||||
|
shared_lock l(m_mutex);
|
||||||
|
return m_env;
|
||||||
|
}
|
||||||
|
|
||||||
|
void shared_environment::add(certified_declaration const & d) {
|
||||||
|
exclusive_lock l(m_mutex);
|
||||||
|
m_env = m_env.add(d);
|
||||||
|
}
|
||||||
|
|
||||||
|
void shared_environment::replace(certified_declaration const & t) {
|
||||||
|
exclusive_lock l(m_mutex);
|
||||||
|
m_env = m_env.replace(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
void shared_environment::update(std::function<environment(environment const &)> const & f) {
|
||||||
|
exclusive_lock l(m_mutex);
|
||||||
|
m_env = f(m_env);
|
||||||
|
}
|
||||||
|
}
|
40
src/library/shared_environment.h
Normal file
40
src/library/shared_environment.h
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
Copyright (c) 2014 Microsoft Corporation. All rights reserved.
|
||||||
|
Released under Apache 2.0 license as described in the file LICENSE.
|
||||||
|
|
||||||
|
Author: Leonardo de Moura
|
||||||
|
*/
|
||||||
|
#pragma once
|
||||||
|
#include <functional>
|
||||||
|
#include "util/shared_mutex.h"
|
||||||
|
#include "kernel/environment.h"
|
||||||
|
|
||||||
|
namespace lean {
|
||||||
|
/** \brief Auxiliary object used when multiple threads are trying to populate the same environment. */
|
||||||
|
class shared_environment {
|
||||||
|
environment m_env;
|
||||||
|
mutable shared_mutex m_mutex;
|
||||||
|
public:
|
||||||
|
shared_environment();
|
||||||
|
shared_environment(environment const & env);
|
||||||
|
/** \brief Return a copy of the current environment. This is a constant time operation. */
|
||||||
|
environment get_environment() const;
|
||||||
|
/**
|
||||||
|
\brief Add the given certified declaration to the environment.
|
||||||
|
This is a constant time operation.
|
||||||
|
It blocks this object for a small amount of time.
|
||||||
|
*/
|
||||||
|
void add(certified_declaration const & d);
|
||||||
|
/**
|
||||||
|
\brief Replace the axiom with name <tt>t.get_declaration().get_name()</tt> with the theorem t.get_declaration().
|
||||||
|
This is a constant time operation.
|
||||||
|
It blocks this object for a small amount of time.
|
||||||
|
*/
|
||||||
|
void replace(certified_declaration const & t);
|
||||||
|
/**
|
||||||
|
\brief Update the environment using the given function.
|
||||||
|
This procedure blocks access to this object.
|
||||||
|
*/
|
||||||
|
void update(std::function<environment(environment const &)> const & f);
|
||||||
|
};
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue