#pragma once #include #include #include #include struct ArrayDimension { uint64_t start, step, tripCount; }; class AccessingSet { private: std::vector> allElements; public: AccessingSet(std::vector> input) : allElements(input) {}; AccessingSet() {}; AccessingSet(const AccessingSet& a) { allElements = a.GetElements(); }; std::vector> GetElements() const; void Insert(const std::vector& element); AccessingSet Union(const AccessingSet& source); AccessingSet Intersect(const AccessingSet& secondSet) const; AccessingSet Diff(const AccessingSet& secondSet) const; bool ContainsElement(const std::vector& element) const; void FindCoveredBy(const std::vector& element, std::vector>& result) const; void FindUncovered(const std::vector& element, std::vector>& result) const; friend bool operator!=(const AccessingSet& lhs, const AccessingSet& rhs); }; using ArrayAccessingIndexes = std::map; bool operator!=(const ArrayDimension& lhs, const ArrayDimension& rhs); bool operator!=(const AccessingSet& lhs, const AccessingSet& rhs); bool operator!=(const ArrayAccessingIndexes& lhs, const ArrayAccessingIndexes& rhs);