// SPDX-FileCopyrightText: 2025 The Project Pterodactyl Developers // // SPDX-License-Identifier: MPL-2.0 import Foundation struct Graph { var edges: [Vertex: Set] } extension Graph: Codable where Vertex: Codable {} extension Graph: Sendable where Vertex: Sendable {} extension Graph { func verticesReachableFrom(_ start: Vertex) -> Set { var visited: Set = [] var stack: [Vertex] = [] if let neighbors = edges[start] { stack.append(contentsOf: neighbors) } while let vertex = stack.popLast() { guard !visited.contains(vertex) else { continue } visited.insert(vertex) if let neighbors = edges[vertex] { for neighbor in neighbors where !visited.contains(neighbor) { stack.append(neighbor) } } } return visited } }