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
///////////////////////////////////////////////////////////////////////////////
16
#include <unordered_map>
22
template<typename T, typename U>
25
using sset_t = std::vector<U>;
26
using smap_t = std::vector<std::vector<sset_t>>;
32
std::vector<node_t*> children;
43
bool subsumed(T& el, sset_t& set)
46
if(map.size() > (size_t)el)
48
for(auto& s : map[el])
50
if(std::includes(set.begin(), set.end(), s.begin(), s.end()))
52
/*std::cout << "SUBSUMBED BY ";
53
for(auto& e : s) std::cout << e << ",";
54
std::cout << std::endl;*/
63
bool insert(T& el, sset_t& set)
65
bool inserted = false;
66
if(map.size() <= (size_t)el) map.resize(el + 1);
67
/* std::cout << "ANTI (" << (size_t)el << ") -> ";
68
for(auto& e : set) std::cout << e << ",";
69
std::cout << std::endl;*/
70
if(!subsumed(el, set))
72
auto& chains = map[el];
73
for(int i = chains.size() - 1; i >= 0; --i)
75
if(std::includes(chains[i].begin(), chains[i].end(), set.begin(), set.end()))
77
chains.erase(chains.begin() + i);
80
chains.push_back(set);
93
#endif /* ANTICHAIN_H */
b'\\ No newline at end of file'