luau/EqSat/include/Luau/UnionFind.h
birds3345 2874ca9e86
Optimizations for UnionFind (#1334)
Implements ranks & path compression for union find.

---------

Co-authored-by: Alexander McCord <11488393+alexmccord@users.noreply.github.com>
2024-07-17 16:19:57 -07:00

27 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