Avoid calling done(), as enabled by last patch.
* src/tgbaalgos/bfssteps.cc, src/tgbaalgos/complete.cc, src/tgbaalgos/cycles.cc, src/tgbaalgos/dtgbacomp.cc, src/tgbaalgos/gtec/gtec.cc, src/tgbaalgos/gv04.cc, src/tgbaalgos/isweakscc.cc, src/tgbaalgos/lbtt.cc, src/tgbaalgos/neverclaim.cc, src/tgbaalgos/reachiter.cc, src/tgbaalgos/replayrun.cc, src/tgbaalgos/safety.cc, src/tgbaalgos/save.cc: Avoid calls to done().
This commit is contained in:
parent
1a5c0cb1f3
commit
b4c125c2b9
13 changed files with 143 additions and 137 deletions
|
|
@ -72,8 +72,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
const state* src = todo.front();
|
const state* src = todo.front();
|
||||||
todo.pop_front();
|
todo.pop_front();
|
||||||
tgba_succ_iterator* i = a_->succ_iter(src);
|
for (auto i: a_->succ(src))
|
||||||
for (i->first(); !i->done(); i->next())
|
|
||||||
{
|
{
|
||||||
const state* dest = filter(i->current_state());
|
const state* dest = filter(i->current_state());
|
||||||
|
|
||||||
|
|
@ -88,7 +87,6 @@ namespace spot
|
||||||
{
|
{
|
||||||
// Found it!
|
// Found it!
|
||||||
finalize(father, s, start, l);
|
finalize(father, s, start, l);
|
||||||
a_->release_iter(i);
|
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -100,7 +98,6 @@ namespace spot
|
||||||
father[dest] = s;
|
father[dest] = s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
a_->release_iter(i);
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// -*- coding: utf-8 -*-
|
// -*- coding: utf-8 -*-
|
||||||
// Copyright (C) 2013 Laboratoire de Recherche et Développement
|
// Copyright (C) 2013, 2014 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita.
|
// de l'Epita.
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
|
|
@ -81,13 +81,16 @@ namespace spot
|
||||||
// add a transition to a sink state if the state is not complete.
|
// add a transition to a sink state if the state is not complete.
|
||||||
bdd all = bddtrue;
|
bdd all = bddtrue;
|
||||||
bdd acc = bddfalse;
|
bdd acc = bddfalse;
|
||||||
i->first();
|
if (i->first())
|
||||||
// In case the automaton use state-based acceptance, propagate
|
{
|
||||||
// the acceptance of the first transition to the one we add.
|
// In case the automaton use state-based acceptance, propagate
|
||||||
if (!i->done())
|
// the acceptance of the first transition to the one we add.
|
||||||
acc = i->current_acceptance_conditions();
|
acc = i->current_acceptance_conditions();
|
||||||
for (; !i->done(); i->next())
|
|
||||||
all -= i->current_condition();
|
do
|
||||||
|
all -= i->current_condition();
|
||||||
|
while (i->next());
|
||||||
|
}
|
||||||
if (all != bddfalse)
|
if (all != bddfalse)
|
||||||
{
|
{
|
||||||
trans* t = out_->create_transition(n, 0);
|
trans* t = out_->create_transition(n, 0);
|
||||||
|
|
|
||||||
|
|
@ -95,14 +95,15 @@ namespace spot
|
||||||
while (keep_going && !dfs_.empty())
|
while (keep_going && !dfs_.empty())
|
||||||
{
|
{
|
||||||
dfs_entry& cur = dfs_.back();
|
dfs_entry& cur = dfs_.back();
|
||||||
|
bool cont;
|
||||||
if (cur.succ == 0)
|
if (cur.succ == 0)
|
||||||
{
|
{
|
||||||
cur.succ = aut_->succ_iter(cur.ts->first);
|
cur.succ = aut_->succ_iter(cur.ts->first);
|
||||||
cur.succ->first();
|
cont = cur.succ->first();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
cur.succ->next();
|
cont = cur.succ->next();
|
||||||
if (!cur.succ->done())
|
if (cont)
|
||||||
{
|
{
|
||||||
// Explore one successor.
|
// Explore one successor.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
// -*- coding: utf-8 -*-
|
// -*- coding: utf-8 -*-
|
||||||
// Copyright (C) 2013 Laboratoire de Recherche et Développement
|
// Copyright (C) 2013, 2014 Laboratoire de Recherche et Développement
|
||||||
// de l'Epita.
|
// de l'Epita.
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
|
|
@ -78,8 +78,10 @@ namespace spot
|
||||||
{
|
{
|
||||||
// add a transition to a sink state if the state is not complete.
|
// add a transition to a sink state if the state is not complete.
|
||||||
bdd all = bddtrue;
|
bdd all = bddtrue;
|
||||||
for (i->first(); !i->done(); i->next())
|
if (i->first())
|
||||||
all -= i->current_condition();
|
do
|
||||||
|
all -= i->current_condition();
|
||||||
|
while (i->next());
|
||||||
if (all != bddfalse)
|
if (all != bddfalse)
|
||||||
{
|
{
|
||||||
trans* t = out_->create_transition(n, 0);
|
trans* t = out_->create_transition(n, 0);
|
||||||
|
|
|
||||||
|
|
@ -115,27 +115,29 @@ namespace spot
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
// Remove each destination of this iterator.
|
// Remove each destination of this iterator.
|
||||||
for (i->first(); !i->done(); i->next())
|
if (i->first())
|
||||||
{
|
do
|
||||||
inc_transitions();
|
{
|
||||||
|
inc_transitions();
|
||||||
|
|
||||||
state* s = i->current_state();
|
state* s = i->current_state();
|
||||||
numbered_state_heap::state_index_p spi = ecs_->h->index(s);
|
numbered_state_heap::state_index_p spi = ecs_->h->index(s);
|
||||||
|
|
||||||
// This state is not necessary in H, because if we were
|
// This state is not necessary in H, because if we were
|
||||||
// doing inclusion checking during the emptiness-check
|
// doing inclusion checking during the emptiness-check
|
||||||
// (redefining find()), the index `s' can be included in a
|
// (redefining find()), the index `s' can be included in a
|
||||||
// larger state and will not be found by index(). We can
|
// larger state and will not be found by index(). We can
|
||||||
// safely ignore such states.
|
// safely ignore such states.
|
||||||
if (!spi.first)
|
if (!spi.first)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (*spi.second != -1)
|
if (*spi.second != -1)
|
||||||
{
|
{
|
||||||
*spi.second = -1;
|
*spi.second = -1;
|
||||||
to_remove.push(ecs_->aut->succ_iter(spi.first));
|
to_remove.push(ecs_->aut->succ_iter(spi.first));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
while (i->next());
|
||||||
ecs_->aut->release_iter(i);
|
ecs_->aut->release_iter(i);
|
||||||
if (to_remove.empty())
|
if (to_remove.empty())
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -106,17 +106,18 @@ namespace spot
|
||||||
<< ")" << std::endl;
|
<< ")" << std::endl;
|
||||||
|
|
||||||
tgba_succ_iterator* iter = stack[dftop].lasttr;
|
tgba_succ_iterator* iter = stack[dftop].lasttr;
|
||||||
|
bool cont;
|
||||||
if (!iter)
|
if (!iter)
|
||||||
{
|
{
|
||||||
iter = stack[dftop].lasttr = a_->succ_iter(stack[dftop].s);
|
iter = stack[dftop].lasttr = a_->succ_iter(stack[dftop].s);
|
||||||
iter->first();
|
cont = iter->first();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
iter->next();
|
cont = iter->next();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (iter->done())
|
if (!cont)
|
||||||
{
|
{
|
||||||
trace << " No more successors" << std::endl;
|
trace << " No more successors" << std::endl;
|
||||||
pop();
|
pop();
|
||||||
|
|
|
||||||
|
|
@ -134,10 +134,9 @@ namespace spot
|
||||||
for (auto s: map.states_of(scc))
|
for (auto s: map.states_of(scc))
|
||||||
{
|
{
|
||||||
tgba_succ_iterator* it = a->succ_iter(s);
|
tgba_succ_iterator* it = a->succ_iter(s);
|
||||||
it->first();
|
|
||||||
|
|
||||||
// If a state has no successors, the SCC is not complete.
|
// If a state has no successors, the SCC is not complete.
|
||||||
if (it->done())
|
if (!it->first())
|
||||||
{
|
{
|
||||||
a->release_iter(it);
|
a->release_iter(it);
|
||||||
return false;
|
return false;
|
||||||
|
|
@ -154,9 +153,8 @@ namespace spot
|
||||||
next->destroy();
|
next->destroy();
|
||||||
if (sumall == bddtrue)
|
if (sumall == bddtrue)
|
||||||
break;
|
break;
|
||||||
it->next();
|
|
||||||
}
|
}
|
||||||
while (!it->done());
|
while (it->next());
|
||||||
a->release_iter(it);
|
a->release_iter(it);
|
||||||
|
|
||||||
if (sumall != bddtrue)
|
if (sumall != bddtrue)
|
||||||
|
|
|
||||||
|
|
@ -101,9 +101,8 @@ namespace spot
|
||||||
// is not terribly efficient since we have to create the
|
// is not terribly efficient since we have to create the
|
||||||
// iterator.
|
// iterator.
|
||||||
tgba_succ_iterator* it = aut_->succ_iter(s);
|
tgba_succ_iterator* it = aut_->succ_iter(s);
|
||||||
it->first();
|
bool accepting = it->first()
|
||||||
bool accepting =
|
&& it->current_acceptance_conditions() == all_acc_conds_;
|
||||||
!it->done() && it->current_acceptance_conditions() == all_acc_conds_;
|
|
||||||
aut_->release_iter(it);
|
aut_->release_iter(it);
|
||||||
return accepting;
|
return accepting;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,9 +86,8 @@ namespace spot
|
||||||
// is not terribly efficient since we have to create the
|
// is not terribly efficient since we have to create the
|
||||||
// iterator.
|
// iterator.
|
||||||
tgba_succ_iterator* it = aut_->succ_iter(s);
|
tgba_succ_iterator* it = aut_->succ_iter(s);
|
||||||
it->first();
|
|
||||||
bool accepting =
|
bool accepting =
|
||||||
!it->done() && it->current_acceptance_conditions() == all_acc_conds_;
|
it->first() && it->current_acceptance_conditions() == all_acc_conds_;
|
||||||
aut_->release_iter(it);
|
aut_->release_iter(it);
|
||||||
return accepting;
|
return accepting;
|
||||||
}
|
}
|
||||||
|
|
@ -111,8 +110,7 @@ namespace spot
|
||||||
if (state_is_accepting(s))
|
if (state_is_accepting(s))
|
||||||
{
|
{
|
||||||
tgba_succ_iterator* it = aut_->succ_iter(s);
|
tgba_succ_iterator* it = aut_->succ_iter(s);
|
||||||
it->first();
|
if (!it->first())
|
||||||
if (it->done())
|
|
||||||
label = "accept_S" + ns;
|
label = "accept_S" + ns;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -136,8 +134,7 @@ namespace spot
|
||||||
process_state(const state* s, int n, tgba_succ_iterator*)
|
process_state(const state* s, int n, tgba_succ_iterator*)
|
||||||
{
|
{
|
||||||
tgba_succ_iterator* it = aut_->succ_iter(s);
|
tgba_succ_iterator* it = aut_->succ_iter(s);
|
||||||
it->first();
|
if (!it->first())
|
||||||
if (it->done())
|
|
||||||
{
|
{
|
||||||
if (fi_needed_ != 0)
|
if (fi_needed_ != 0)
|
||||||
os_ << " fi;\n";
|
os_ << " fi;\n";
|
||||||
|
|
|
||||||
|
|
@ -61,27 +61,29 @@ namespace spot
|
||||||
int tn = seen[t];
|
int tn = seen[t];
|
||||||
tgba_succ_iterator* si = aut_->succ_iter(t);
|
tgba_succ_iterator* si = aut_->succ_iter(t);
|
||||||
process_state(t, tn, si);
|
process_state(t, tn, si);
|
||||||
for (si->first(); !si->done(); si->next())
|
if (si->first())
|
||||||
{
|
do
|
||||||
const state* current = si->current_state();
|
{
|
||||||
seen_map::const_iterator s = seen.find(current);
|
const state* current = si->current_state();
|
||||||
bool ws = want_state(current);
|
seen_map::const_iterator s = seen.find(current);
|
||||||
if (s == seen.end())
|
bool ws = want_state(current);
|
||||||
{
|
if (s == seen.end())
|
||||||
seen[current] = ++n;
|
{
|
||||||
if (ws)
|
seen[current] = ++n;
|
||||||
{
|
if (ws)
|
||||||
add_state(current);
|
{
|
||||||
process_link(t, tn, current, n, si);
|
add_state(current);
|
||||||
}
|
process_link(t, tn, current, n, si);
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
{
|
else
|
||||||
if (ws)
|
{
|
||||||
process_link(t, tn, s->first, s->second, si);
|
if (ws)
|
||||||
current->destroy();
|
process_link(t, tn, s->first, s->second, si);
|
||||||
}
|
current->destroy();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
while (si->next());
|
||||||
aut_->release_iter(si);
|
aut_->release_iter(si);
|
||||||
}
|
}
|
||||||
end();
|
end();
|
||||||
|
|
|
||||||
|
|
@ -62,14 +62,14 @@ namespace spot
|
||||||
l = &run->cycle;
|
l = &run->cycle;
|
||||||
in = "cycle";
|
in = "cycle";
|
||||||
if (!debug)
|
if (!debug)
|
||||||
os << "No prefix.\nCycle:" << std::endl;
|
os << "No prefix.\nCycle:\n";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
l = &run->prefix;
|
l = &run->prefix;
|
||||||
in = "prefix";
|
in = "prefix";
|
||||||
if (!debug)
|
if (!debug)
|
||||||
os << "Prefix:" << std::endl;
|
os << "Prefix:\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
tgba_run::steps::const_iterator i = l->begin();
|
tgba_run::steps::const_iterator i = l->begin();
|
||||||
|
|
@ -78,9 +78,9 @@ namespace spot
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
os << "ERROR: First state of run (in " << in << "): "
|
os << "ERROR: First state of run (in " << in << "): "
|
||||||
<< a->format_state(i->s) << std::endl
|
<< a->format_state(i->s)
|
||||||
<< "does not match initial state of automata: "
|
<< "\ndoes not match initial state of automata: "
|
||||||
<< a->format_state(s) << std::endl;
|
<< a->format_state(s) << '\n';
|
||||||
s->destroy();
|
s->destroy();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
@ -112,7 +112,7 @@ namespace spot
|
||||||
{
|
{
|
||||||
os << " ";
|
os << " ";
|
||||||
}
|
}
|
||||||
os << a->format_state(s) << std::endl;
|
os << a->format_state(s) << '\n';
|
||||||
|
|
||||||
// expected outgoing transition
|
// expected outgoing transition
|
||||||
bdd label = i->label;
|
bdd label = i->label;
|
||||||
|
|
@ -133,7 +133,7 @@ namespace spot
|
||||||
in = "cycle";
|
in = "cycle";
|
||||||
i = l->begin();
|
i = l->begin();
|
||||||
if (!debug)
|
if (!debug)
|
||||||
os << "Cycle:" << std::endl;
|
os << "Cycle:\n";
|
||||||
}
|
}
|
||||||
next = l->begin()->s;
|
next = l->begin()->s;
|
||||||
}
|
}
|
||||||
|
|
@ -144,24 +144,26 @@ namespace spot
|
||||||
// destroy it right now.
|
// destroy it right now.
|
||||||
if (!debug)
|
if (!debug)
|
||||||
s->destroy();
|
s->destroy();
|
||||||
for (j->first(); !j->done(); j->next())
|
if (j->first())
|
||||||
{
|
do
|
||||||
if (j->current_condition() != label
|
{
|
||||||
|| j->current_acceptance_conditions() != acc)
|
if (j->current_condition() != label
|
||||||
continue;
|
|| j->current_acceptance_conditions() != acc)
|
||||||
|
|
||||||
const state* s2 = j->current_state();
|
|
||||||
if (s2->compare(next))
|
|
||||||
{
|
|
||||||
s2->destroy();
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
else
|
const state* s2 = j->current_state();
|
||||||
{
|
if (s2->compare(next))
|
||||||
s = s2;
|
{
|
||||||
break;
|
s2->destroy();
|
||||||
}
|
continue;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
s = s2;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (j->next());
|
||||||
if (j->done())
|
if (j->done())
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
|
|
@ -170,24 +172,26 @@ namespace spot
|
||||||
<< bdd_format_formula(a->get_dict(), label)
|
<< bdd_format_formula(a->get_dict(), label)
|
||||||
<< " and acc=" << bdd_format_accset(a->get_dict(), acc)
|
<< " and acc=" << bdd_format_accset(a->get_dict(), acc)
|
||||||
<< " leaving state " << serial
|
<< " leaving state " << serial
|
||||||
<< " for state " << a->format_state(next)
|
<< " for state " << a->format_state(next) << '\n'
|
||||||
<< std::endl
|
|
||||||
<< "The following transitions leave state " << serial
|
<< "The following transitions leave state " << serial
|
||||||
<< ":" << std::endl;
|
<< ":\n";
|
||||||
for (j->first(); !j->done(); j->next())
|
if (j->first())
|
||||||
{
|
do
|
||||||
const state* s2 = j->current_state();
|
{
|
||||||
os << " *";
|
const state* s2 = j->current_state();
|
||||||
print_annotation(os, a, j);
|
os << " *";
|
||||||
os << " label="
|
print_annotation(os, a, j);
|
||||||
<< bdd_format_formula(a->get_dict(),
|
os << " label="
|
||||||
j->current_condition())
|
<< bdd_format_formula(a->get_dict(),
|
||||||
<< " and acc="
|
j->current_condition())
|
||||||
<< bdd_format_accset(a->get_dict(),
|
<< " and acc="
|
||||||
j->current_acceptance_conditions())
|
<< (bdd_format_accset
|
||||||
<< " going to " << a->format_state(s2) << std::endl;
|
(a->get_dict(),
|
||||||
s2->destroy();
|
j->current_acceptance_conditions()))
|
||||||
}
|
<< " going to " << a->format_state(s2) << '\n';
|
||||||
|
s2->destroy();
|
||||||
|
}
|
||||||
|
while (j->next());
|
||||||
}
|
}
|
||||||
a->release_iter(j);
|
a->release_iter(j);
|
||||||
s->destroy();
|
s->destroy();
|
||||||
|
|
@ -228,8 +232,7 @@ namespace spot
|
||||||
if (debug)
|
if (debug)
|
||||||
os << "all acceptance conditions ("
|
os << "all acceptance conditions ("
|
||||||
<< bdd_format_accset(a->get_dict(), all_acc)
|
<< bdd_format_accset(a->get_dict(), all_acc)
|
||||||
<< ") have been seen"
|
<< ") have been seen\n";
|
||||||
<< std::endl;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -238,11 +241,10 @@ namespace spot
|
||||||
{
|
{
|
||||||
if (debug)
|
if (debug)
|
||||||
os << "ERROR: The cycle's acceptance conditions ("
|
os << "ERROR: The cycle's acceptance conditions ("
|
||||||
<< bdd_format_accset(a->get_dict(), all_acc) << ") do not"
|
<< bdd_format_accset(a->get_dict(), all_acc)
|
||||||
<< std::endl
|
<< ") do not\nmatch those of the automaton ("
|
||||||
<< "match those of the automata ("
|
|
||||||
<< bdd_format_accset(a->get_dict(), expected_all_acc)
|
<< bdd_format_accset(a->get_dict(), expected_all_acc)
|
||||||
<< std::endl;
|
<< ")\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -57,8 +57,7 @@ namespace spot
|
||||||
assert(!it->done());
|
assert(!it->done());
|
||||||
state* dest = it->current_state();
|
state* dest = it->current_state();
|
||||||
bdd cond = it->current_condition();
|
bdd cond = it->current_condition();
|
||||||
it->next();
|
result = (!it->next()) && (cond == bddtrue) && (!dest->compare(s));
|
||||||
result = (!dest->compare(s)) && it->done() && (cond == bddtrue);
|
|
||||||
dest->destroy();
|
dest->destroy();
|
||||||
aut->release_iter(it);
|
aut->release_iter(it);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,8 +1,9 @@
|
||||||
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement
|
// -*- coding: utf-8 -*-
|
||||||
// de l'Epita (LRDE)
|
// Copyright (C) 2011, 2012, 2014 Laboratoire de Recherche et
|
||||||
|
// Développement de l'Epita (LRDE)
|
||||||
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de Paris
|
// Copyright (C) 2003, 2004, 2005 Laboratoire d'Informatique de Paris
|
||||||
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
// 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
|
||||||
// Université Pierre et Marie Curie.
|
// Université Pierre et Marie Curie.
|
||||||
//
|
//
|
||||||
// This file is part of Spot, a model checking library.
|
// This file is part of Spot, a model checking library.
|
||||||
//
|
//
|
||||||
|
|
@ -51,17 +52,19 @@ namespace spot
|
||||||
{
|
{
|
||||||
const bdd_dict* d = aut_->get_dict();
|
const bdd_dict* d = aut_->get_dict();
|
||||||
std::string cur = escape_str(aut_->format_state(s));
|
std::string cur = escape_str(aut_->format_state(s));
|
||||||
for (si->first(); !si->done(); si->next())
|
if (si->first())
|
||||||
{
|
do
|
||||||
state* dest = si->current_state();
|
{
|
||||||
os_ << "\"" << cur << "\", \"";
|
state* dest = si->current_state();
|
||||||
escape_str(os_, aut_->format_state(dest));
|
os_ << "\"" << cur << "\", \"";
|
||||||
os_ << "\", \"";
|
escape_str(os_, aut_->format_state(dest));
|
||||||
escape_str(os_, bdd_format_formula(d, si->current_condition()));
|
os_ << "\", \"";
|
||||||
os_ << "\",";
|
escape_str(os_, bdd_format_formula(d, si->current_condition()));
|
||||||
print_acc(si->current_acceptance_conditions()) << ";\n";
|
os_ << "\",";
|
||||||
dest->destroy();
|
print_acc(si->current_acceptance_conditions()) << ";\n";
|
||||||
}
|
dest->destroy();
|
||||||
|
}
|
||||||
|
while (si->next());
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue