luau/EqSat/include/Luau/UnionFind.h
2024-07-25 17:10:42 -07:00

28 lines
516 B
C++

// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
#pragma once
#include "Luau/Id.h"
#include <vector>
namespace Luau::EqSat
{
/// See <https://dl.acm.org/doi/pdf/10.1145/321879.321884>.
struct UnionFind final
{
Id makeSet();
Id find(Id id) const;
Id find(Id id);
void merge(Id a, Id b);
private:
std::vector<Id> parents;
std::vector<int> ranks;
private:
Id canonicalize(Id id) const;
};
} // namespace Luau::EqSat