1
// -*- mode: C++; c-file-style: "stroustrup"; c-basic-offset: 4; indent-tabs-mode: nil; -*-
2
///////////////////////////////////////////////////////////////////////////////
4
// This file is a part of UPPAAL.
5
// Copyright (c) 1995 - 2006, Uppsala University and Aalborg University.
8
///////////////////////////////////////////////////////////////////////////////
15
#include <unordered_map>
21
template<typename T, typename U>
24
using set_t = std::set<U>;
25
using sset_t = std::vector<U>;
26
using smap_t = std::vector<std::vector<sset_t>>;
32
std::vector<node_t*> children;
44
bool subsumed(T& el, const S& set)
47
if(map.size() > (size_t)el)
49
for(auto& s : map[el])
51
if(std::includes(set.begin(), set.end(), s.begin(), s.end()))
53
/*std::cout << "SUBSUMBED BY ";
54
for(auto& e : s) std::cout << e << ",";
55
std::cout << std::endl;*/
65
bool insert(T& el, const S& set)
67
bool inserted = false;
68
if(map.size() <= (size_t)el) map.resize(el + 1);
69
/* std::cout << "ANTI (" << (size_t)el << ") -> ";
70
for(auto& e : set) std::cout << e << ",";
71
std::cout << std::endl;*/
72
if(!subsumed(el, set))
74
auto& chains = map[el];
75
for(int i = chains.size() - 1; i >= 0; --i)
77
if(std::includes(chains[i].begin(), chains[i].end(), set.begin(), set.end()))
79
chains.erase(chains.begin() + i);
82
chains.emplace_back(sset_t{set.begin(), set.end()});
95
#endif /* ANTICHAIN_H */