10
10
class EquivalenceClass {
13
EquivalenceClass(ColorType *colorType);
14
EquivalenceClass(ColorType *colorType, intervalTuple_t colorIntervals);
12
EquivalenceClass(uint32_t id);
13
EquivalenceClass(uint32_t id, const ColorType *colorType);
14
EquivalenceClass(uint32_t id, const ColorType *colorType, interval_vector_t&& colorIntervals);
15
15
~EquivalenceClass() {}
16
std::string toString(){
17
std::cout << "Id: " << _id << std::endl;
16
std::string toString() const{
18
17
return _colorIntervals.toString();
22
if(_colorIntervals.size() < 1 || _colorIntervals.getFirst().size() < 1){
21
if(_colorIntervals.size() < 1 || _colorIntervals.front().size() < 1){
28
bool containsColor(std::vector<uint32_t> ids);
32
EquivalenceClass intersect(EquivalenceClass other);
34
EquivalenceClass subtract(EquivalenceClass other, bool print);
36
static uint32_t idCounter;
27
bool containsColor(const std::vector<uint32_t> &ids, const std::vector<bool> &diagonalPositions) const;
31
EquivalenceClass intersect(uint32_t id, const EquivalenceClass &other) const;
33
EquivalenceClass subtract(uint32_t id, const EquivalenceClass &other, const std::vector<bool> &diagonalPositions) const;
35
uint32_t id() const { return _id; }
36
const ColorType* type() const { return _colorType; }
37
const interval_vector_t& intervals() const { return _colorIntervals; }
38
void clear() { _colorIntervals.clear(); }
39
void setIntervalVector(const interval_vector_t& interval) { _colorIntervals = interval; }
40
void addInterval(interval_t&& interval) { _colorIntervals.addInterval(interval); }
38
ColorType *_colorType;
39
intervalTuple_t _colorIntervals;
43
const ColorType *_colorType;
44
interval_vector_t _colorIntervals;
46
struct EquivalenceVec{
47
std::vector<EquivalenceClass> _equivalenceClasses;
48
std::unordered_map<const Colored::Color *, EquivalenceClass *> colorEQClassMap;
49
bool diagonal = false;
51
void applyPartition(Colored::ArcIntervals& arcInterval){
55
std::vector<Colored::intervalTuple_t> newTupleVec;
56
for(auto intervalTuple : arcInterval._intervalTupleVec){
57
intervalTuple.combineNeighbours();
58
intervalTuple_t newIntervalTuple;
59
for(auto interval : intervalTuple._intervals){
60
for(auto EQClass : _equivalenceClasses){
61
for(auto EQinterval : EQClass._colorIntervals._intervals){
62
auto overlap = interval.getOverlap(EQinterval);
63
if(overlap.isSound()){
64
newIntervalTuple.addInterval(EQinterval.getSingleColorInterval());
70
newTupleVec.push_back(std::move(newIntervalTuple));
72
arcInterval._intervalTupleVec = std::move(newTupleVec);
79
#endif /* PARTITION_H */
b'\\ No newline at end of file'
51
#endif /* EQUIVALENCECLASS_H */
b'\\ No newline at end of file'