Definition at line 15 of file cse.cpp.
◆ FuncArgTracker()
Definition at line 26 of file cse.cpp.
28 {
30 for (
unsigned func_i = 0; func_i < funcs.
size(); func_i++) {
32 for (auto &func_arg : funcs[func_i].second) {
33 unsigned arg_number = get_or_add_value_number(func_arg);
34 func_argset.
insert(arg_number);
35 arg_to_funcset[arg_number].
insert(func_i);
36 }
38 }
39 }
◆ get_args_in_value_order()
template<typename Container >
vec_basic SymEngine::FuncArgTracker::get_args_in_value_order |
( |
Container & |
argset | ) |
|
|
inline |
Definition at line 42 of file cse.cpp.
43 {
44 vec_basic v;
45 for (unsigned i : argset) {
47 }
48 return v;
49 }
◆ get_common_arg_candidates()
std::map< unsigned, unsigned > SymEngine::FuncArgTracker::get_common_arg_candidates |
( |
std::set< unsigned > & |
argset, |
|
|
unsigned |
min_func_i |
|
) |
| |
|
inline |
Definition at line 78 of file cse.cpp.
79 {
82 for (unsigned arg : argset) {
84 }
85
88 return a.size() < b.size();
89 });
90
91 for (
unsigned i = 0; i < funcsets.
size(); i++) {
92 auto &funcset = funcsets[i];
93 for (unsigned func_i : funcset) {
94 if (func_i >= min_func_i) {
95 count_map[func_i] += 1;
96 }
97 }
98 }
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125 auto iter = count_map.
begin();
126 for (; iter != count_map.
end();) {
127 if (iter->second >= 2) {
128 ++iter;
129 } else {
130 count_map.
erase(iter++);
131 }
132 }
133 return count_map;
134 }
◆ get_or_add_value_number()
unsigned SymEngine::FuncArgTracker::get_or_add_value_number |
( |
RCP< const Basic > |
value | ) |
|
|
inline |
Definition at line 51 of file cse.cpp.
52 {
53 unsigned nvalues = numeric_cast<unsigned>(value_numbers.size());
55 bool inserted = ret.second;
56 if (inserted) {
59 return nvalues;
60 } else {
61 return ret.first->second;
62 }
63 }
◆ get_subset_candidates()
template<typename Container1 , typename Container2 >
std::vector< unsigned > SymEngine::FuncArgTracker::get_subset_candidates |
( |
const Container1 & |
argset, |
|
|
const Container2 & |
restrict_to_funcset |
|
) |
| |
|
inline |
Definition at line 138 of file cse.cpp.
140 {
142 for (auto f : restrict_to_funcset) {
144 }
147 for (const auto &arg : argset) {
149 arg_to_funcset[arg].begin(),
150 arg_to_funcset[arg].end(),
152 intersect_result.
swap(indices);
153 intersect_result.
clear();
154 }
155 return indices;
156 }
T back_inserter(T... args)
T set_intersection(T... args)
◆ stop_arg_tracking()
void SymEngine::FuncArgTracker::stop_arg_tracking |
( |
unsigned |
func_i | ) |
|
|
inline |
Definition at line 65 of file cse.cpp.
66 {
67 for (unsigned arg : func_to_argset[func_i]) {
68 arg_to_funcset[arg].
erase(func_i);
69 }
70 }
◆ update_func_argset()
void SymEngine::FuncArgTracker::update_func_argset |
( |
unsigned |
func_i, |
|
|
const std::vector< unsigned > & |
new_args |
|
) |
| |
|
inline |
Definition at line 158 of file cse.cpp.
160 {
161
162 auto &old_args = func_to_argset[func_i];
163
167
168 for (auto &deleted_arg : diff) {
169 arg_to_funcset[deleted_arg].
erase(func_i);
170 }
171
172 diff.clear();
175
176 for (auto &added_arg : diff) {
177 arg_to_funcset[added_arg].
insert(func_i);
178 }
179
180 func_to_argset[func_i].
clear();
182 }
T set_difference(T... args)
◆ arg_to_funcset
◆ func_to_argset
◆ value_number_to_value
vec_basic SymEngine::FuncArgTracker::value_number_to_value |
◆ value_numbers
The documentation for this class was generated from the following file:
- /home/runner/work/symengine/symengine/symengine/cse.cpp