mirror of
https://github.com/luau-lang/luau.git
synced 2025-04-21 04:03:47 +01:00
35 lines
714 B
C++
35 lines
714 B
C++
// This file is part of the Luau programming language and is licensed under MIT License; see LICENSE.txt for details
|
||
#include "Luau/UnionFind.h"
|
||
|
||
#include "Luau/Common.h"
|
||
|
||
namespace Luau::EqSat
|
||
{
|
||
|
||
Id UnionFind::makeSet()
|
||
{
|
||
Id id{parents.size()};
|
||
parents.push_back(id);
|
||
return id;
|
||
}
|
||
|
||
Id UnionFind::find(Id id) const
|
||
{
|
||
LUAU_ASSERT(size_t(id) < parents.size());
|
||
|
||
// An e-class id 𝑎 is canonical iff find(𝑎) = 𝑎.
|
||
while (id != parents[size_t(id)])
|
||
id = parents[size_t(id)];
|
||
|
||
return id;
|
||
}
|
||
|
||
void UnionFind::merge(Id a, Id b)
|
||
{
|
||
LUAU_ASSERT(size_t(a) < parents.size());
|
||
LUAU_ASSERT(size_t(b) < parents.size());
|
||
|
||
parents[size_t(b)] = a;
|
||
}
|
||
|
||
} // namespace Luau::EqSat
|