18 bool DeltaAlgorithm::GetTestResult(
const changeset_ty &Changes) {
19 if (FailedTestsCache.count(Changes))
24 FailedTestsCache.insert(Changes);
34 unsigned idx = 0,
N = S.size() / 2;
35 for (changeset_ty::const_iterator it = S.begin(),
36 ie = S.end(); it != ie; ++it, ++idx)
37 ((idx <
N) ? LHS : RHS).insert(*it);
56 if (Search(Changes, Sets, Res))
61 for (changesetlist_ty::const_iterator it = Sets.begin(),
62 ie = Sets.end(); it != ie; ++it)
63 Split(*it, SplitSets);
64 if (SplitSets.size() == Sets.size())
67 return Delta(Changes, SplitSets);
74 for (changesetlist_ty::const_iterator it = Sets.begin(),
75 ie = Sets.end(); it != ie; ++it) {
77 if (GetTestResult(*it)) {
80 Res = Delta(*it, Sets);
86 if (Sets.size() > 2) {
90 Changes.begin(), Changes.end(), it->begin(), it->end(),
91 std::insert_iterator<changeset_ty>(Complement, Complement.begin()));
92 if (GetTestResult(Complement)) {
94 ComplementSets.insert(ComplementSets.end(), Sets.begin(), it);
95 ComplementSets.insert(ComplementSets.end(), it + 1, Sets.end());
96 Res = Delta(Complement, ComplementSets);
112 Split(Changes, Sets);
114 return Delta(Changes, Sets);
This class represents lattice values for constants.
virtual void UpdatedSearchState(const changeset_ty &Changes, const changesetlist_ty &Sets)
UpdatedSearchState - Callback used when the search state changes.
std::set< change_ty > changeset_ty
S1Ty set_difference(const S1Ty &S1, const S2Ty &S2)
set_difference(A, B) - Return A - B
virtual ~DeltaAlgorithm()
changeset_ty Run(const changeset_ty &Changes)
Run - Minimize the set Changes by executing.
std::vector< changeset_ty > changesetlist_ty
virtual bool ExecuteOneTest(const changeset_ty &S)=0
ExecuteOneTest - Execute a single test predicate on the change set S.