7 #ifndef OTAWA_DFA_XITERATIVEDFA_H
8 #define OTAWA_DFA_XITERATIVEDFA_H
10 #include <elm/assert.h>
12 namespace otawa {
namespace dfa {
25 inline typename V::domain_t *
in(
const typename V::key_t& key)
27 inline typename V::domain_t *
out(
const typename V::key_t& key)
29 inline typename V::domain_t *
gen(
const typename V::key_t& key)
31 inline typename V::domain_t *
preserve(
const typename V::key_t& key)
39 : visit(visitor), ins(0) {
41 ins =
new typename V::domain_t *[
size];
42 outs =
new typename V::domain_t *[
size];
43 gens =
new typename V::domain_t *[
size];
45 for(
int i = 0; i <
size; i++) {
55 for(
int i = 0; i <
size; i++) {
59 visit.free(preserves[i]);
70 new_out->join(outs[pred]);
75 bool fixpoint =
false;
76 typename V::domain_t *tmp;
77 new_out = visit.empty();
80 for(
int i = 0; i <
size; i++) {
82 visit.visitPreds(*
this, i);
87 new_out->join(ins[i]);
88 new_out->meet(preserves[i]);
89 new_out->join(gens[i]);
90 if(!new_out->equals(outs[i])) {
103 #endif // OTAWA_DFA_XITERATIVEDFA_H
XIterativeDFA(V &visitor)
Build an iterative DFA with the given visitor.
Definition: XIterativeDFA.h:38
V::domain_t ** ins
Definition: XIterativeDFA.h:19
V & visit
Definition: XIterativeDFA.h:17
void nextPred(int pred)
This functions is used internally to communicate with the visitor.
Definition: XIterativeDFA.h:68
V::domain_t * gen(const typename V::key_t &key)
Definition: XIterativeDFA.h:29
V::domain_t * in(const typename V::key_t &key)
Definition: XIterativeDFA.h:25
~XIterativeDFA(void)
Definition: XIterativeDFA.h:54
int size
Definition: XIterativeDFA.h:18
V::domain_t * out(const typename V::key_t &key)
Definition: XIterativeDFA.h:27
void process(void)
Definition: XIterativeDFA.h:74
V::domain_t ** gens
Definition: XIterativeDFA.h:19
V::domain_t * new_out
Definition: XIterativeDFA.h:19
clp::Value V
Definition: SymbolicExpr.h:46
V::domain_t ** outs
Definition: XIterativeDFA.h:19
V::domain_t ** preserves
Definition: XIterativeDFA.h:19
V::domain_t * preserve(const typename V::key_t &key)
Definition: XIterativeDFA.h:31
The DFAEngine implements an extended Iterative Data Flow Algorithm, that is, it work on graphs with a...
Definition: XIterativeDFA.h:16