12#ifndef MCRL2_DATA_REWRITERS_DATA_REWRITER_H
13#define MCRL2_DATA_REWRITERS_DATA_REWRITER_H
15#include "mcrl2/data/concepts.h"
16#include "mcrl2/data/builder.h"
17#include "mcrl2/data/substitutions/no_substitution.h"
19namespace mcrl2::
data {
23template <
typename DataRewriter, IsSubstitution SubstitutionFunction>
29template <
typename DataRewriter>
36template <
template <
class>
class Builder,
class Derived,
class DataRewriter, IsSubstitution SubstitutionFunction =
no_substitution>
39 using super = Builder<Derived>;
43 const DataRewriter&
m_R;
60 data_rewrite(atermpp::assign_cast<data_expression>(result), x, m_R, m_sigma);
65template <
typename Derived,
typename DataRewriter, IsSubstitution SubstitutionFunction>
78template <
template <
class,
class,
class>
class Builder,
class DataRewriter, IsSubstitution SubstitutionFunction>
93#include "mcrl2/core/detail/builder_msvc.inc.h"
97template <
template <
class,
class,
class>
class Builder,
class DataRewriter, IsSubstitution SubstitutionFunction>
101 return apply_rewriter_builder<Builder, DataRewriter, SubstitutionFunction>(datar, sigma);
107template <
typename DataRewriter>
113 const DataRewriter&
R;
125 template <IsSubstitution SubstitutionFunction>
void data_rewrite(data_expression &result, const data_expression &x, const DataRewriter &R, SubstitutionFunction &sigma)
apply_rewriter_builder< Builder, DataRewriter, SubstitutionFunction > make_apply_rewriter_builder(const DataRewriter &datar, SubstitutionFunction &sigma)
void data_rewrite(data_expression &result, const data_expression &x, const DataRewriter &R, no_substitution &)
A rewriter that applies a data rewriter to data expressions in a term.
data_rewriter(const DataRewriter &R_)
data_expression operator()(const data_expression &x, SubstitutionFunction &sigma) const
data_expression operator()(const data_expression &x) const
Applies a data rewriter to data expressions appearing in a term. It works both with and without a sub...
data_expression operator()(const data_expression &x)
void apply(T &result, const data_expression &x)
add_data_rewriter(const DataRewriter &R, SubstitutionFunction &sigma)
SubstitutionFunction & m_sigma
apply_rewriter_builder(const DataRewriter &datar, SubstitutionFunction &sigma)
data_rewriter_builder(const DataRewriter &R, SubstitutionFunction &sigma)
An empty struct that is used to denote the absence of a substitution. Used for rewriters.