mCRL2
Loading...
Searching...
No Matches
split_finite_variables.h
Go to the documentation of this file.
1// Author(s): Wieger Wesselink
2// Copyright: see the accompanying file COPYING or copy at
3// https://github.com/mCRL2org/mCRL2/blob/master/COPYING
4//
5// Distributed under the Boost Software License, Version 1.0.
6// (See accompanying file LICENSE_1_0.txt or copy at
7// http://www.boost.org/LICENSE_1_0.txt)
8//
11
12#ifndef MCRL2_DATA_DETAIL_SPLIT_FINITE_VARIABLES_H
13#define MCRL2_DATA_DETAIL_SPLIT_FINITE_VARIABLES_H
14
16
17namespace mcrl2 {
18
19namespace data {
20
21namespace detail {
22
30template<typename FILTER>
31inline
33 const data::data_specification& data,
34 data::variable_list& finite_variables,
35 data::variable_list& infinite_variables,
36 data::variable_list& unused,
37 const FILTER filter)
38{
39 for (data::variable_list::const_reverse_iterator i = variables.rbegin(); i!=variables.rend(); i++)
40 {
41 if (!filter(*i))
42 {
43 unused.push_front(*i);
44 }
45 else if (data.is_certainly_finite(i->sort()))
46 {
47 finite_variables.push_front(*i);
48 }
49 else
50 {
51 infinite_variables.push_front(*i);
52 }
53 }
54}
55
64template <typename Rewriter, typename FILTER>
65inline
67 const data::data_specification& data,
68 const Rewriter& rewr,
69 data::variable_list& enumerable_variables,
70 data::variable_list& non_enumerable_variables,
71 data::variable_list& unused,
72 const FILTER filter)
73{
74 for (data::variable_list::const_reverse_iterator i = variables.rbegin(); i!=variables.rend(); i++)
75 {
76 if (!filter(*i))
77 {
78 unused.push_front(*i);
79 }
80 else if (is_enumerable(data, rewr, i->sort()))
81 {
82 enumerable_variables.push_front(*i);
83 }
84 else
85 {
86 non_enumerable_variables.push_front(*i);
87 }
88 }
89}
90
91/* /// \brief Computes the subset with variables of finite sort and infinite.
92// TODO: this should be done more efficiently, by avoiding aterm lists
97inline
98void split_finite_variables(data::variable_list variables,
99 const data::data_specification& data,
100 data::variable_list& finite_variables,
101 data::variable_list& infinite_variables)
102{
103 for (data::variable_list::const_reverse_iterator i = variables.rbegin(); i!=variables.rend(); i++)
104 {
105 if (data.is_certainly_finite(i->sort()))
106 {
107 finite_variables.push_front(*i);
108 }
109 else
110 {
111 infinite_variables.push_front(*i);
112 }
113 }
114}
115
116template <typename Rewriter>
117inline
118void split_enumerable_variables(data::variable_list variables,
119 const data::data_specification& data,
120 const Rewriter& rewr,
121 data::variable_list& enumerable_variables,
122 data::variable_list& non_enumerable_variables)
123{
124 for (data::variable_list::const_reverse_iterator i = variables.rbegin(); i!=variables.rend(); i++)
125 {
126 if (is_enumerable(data, rewr, i->sort()))
127 {
128 enumerable_variables.push_front(*i);
129 }
130 else
131 {
132 non_enumerable_variables.push_front(*i);
133 }
134 }
135} */
136
137} // namespace detail
138
139} // namespace data
140
141} // namespace mcrl2
142
143#endif // MCRL2_DATA_DETAIL_SPLIT_FINITE_VARIABLES_H
Reverse iterator for term_list.
const_reverse_iterator rend() const
Returns a const_iterator pointing to the end of the term_list.
Definition aterm_list.h:297
void push_front(const Term &el)
Inserts a new element at the beginning of the current list.
const_reverse_iterator rbegin() const
Returns a const_reverse_iterator pointing to the end of the term_list.
Definition aterm_list.h:290
bool is_certainly_finite(const sort_expression &s) const
Checks whether a sort is certainly finite.
Rewriter interface class.
Definition rewrite.h:42
The class data_specification.
void split_finite_variables(data::variable_list variables, const data::data_specification &data, data::variable_list &finite_variables, data::variable_list &infinite_variables, data::variable_list &unused, const FILTER filter)
Splits the variables in a subset with finite sort, with infinite sort and those that are not used acc...
bool is_enumerable(const data_specification &dataspec, const Rewriter &rewr, const sort_expression &sort, std::list< sort_expression > &parents)
Definition enumerator.h:159
void split_enumerable_variables(data::variable_list variables, const data::data_specification &data, const Rewriter &rewr, data::variable_list &enumerable_variables, data::variable_list &non_enumerable_variables, data::variable_list &unused, const FILTER filter)
Splits a list of variables in those that are enumerable, non enumerable and not used,...
A class that takes a linear process specification and checks all tau-summands of that LPS for conflue...
Definition indexed_set.h:72