10#ifndef MCRL2_ATERMPP_ATERM_IMPLEMENTATION_H
11#define MCRL2_ATERMPP_ATERM_IMPLEMENTATION_H
23 const reference_aterm<T, typename std::enable_if_t<std::is_base_of<aterm_core, T>::value>>&
24 reference_aterm<T, typename std::enable_if_t<std::is_base_of<aterm_core, T>::value>>::operator=(
const unprotected_aterm_core& other)
noexcept
32 const reference_aterm<T, typename std::enable_if_t<std::is_base_of<aterm_core, T>::value>>&
33 reference_aterm<T, typename std::enable_if_t<std::is_base_of<aterm_core, T>::value>>::operator=(unprotected_aterm_core&& other)
noexcept
40 template<
typename T,
typename Allocator>
44 m_allocator.deallocate(p, n);
49 : mark_func(mark_func),
93 m_term = other.m_term;
101 m_term = other.m_term;
106template <
bool CHECK_BUSY_FLAG >
119 m_term = other.m_term;
The aterm_core base class that provides protection of the underlying shared terms.
~aterm_core() noexcept
Standard destructor.
aterm_core & operator=(const aterm_core &other) noexcept
Assignment operator.
aterm_core() noexcept
Default constructor.
aterm_core & assign(const aterm_core &other, detail::thread_aterm_pool &pool) noexcept
Assignment operator, to be used if busy and forbidden flags are explicitly available.
aterm_core & unprotected_assign(const aterm_core &other) noexcept
Assignment operator, to be used when the busy flags do not need to be set.
This is the class to which an aterm points.
void deallocate(T *p, size_type n)
aterm_container(std::function< void(term_mark_stack &)> mark_func, std::function< std::size_t()> size_func)
This is a thread's specific access to the global aterm pool which ensures that garbage collection and...
void deregister_container(aterm_container *variable)
Removes the given container from the active variables.
void register_container(aterm_container *variable)
Consider the given container when marking underlying terms.
void deregister_variable(aterm_core *variable)
Removes the given variable from the active variables.
bool is_shared_locked()
Returns true iff we are in a shared section.
void register_variable(aterm_core *variable)
Consider the given variable when marking underlying terms.
mcrl2::utilities::shared_guard lock_shared()
Acquire a shared lock on this thread aterm pool.
An unprotected term does not change the reference count of the shared term when it is copied or moved...
const detail::_aterm * m_term
A shared lock guard for the shared_mutex.
_aterm * address(const unprotected_aterm_core &t)
thread_aterm_pool & g_thread_term_pool()
A reference to the thread local term pool storage.
The main namespace for the aterm++ library.
std::stack< std::reference_wrapper< detail::_aterm > > term_mark_stack
static constexpr bool GlobalThreadSafe
Enables thread safety for the whole toolset.