//! Faithful port of `Luau::detail::Arcs` (`Analysis/src/TopoSortStatements.cpp:72`).
//!
//! ```cpp
//! struct Arcs
//! {
//!     std::set<Node*> provides;
//!     std::set<Node*> depends;
//! };
//! ```
//!
//! `std::set<Node*>` is an ordered set keyed by the raw node pointer; the C++
//! code relies only on insert / erase / find / empty, all of which a Rust
//! `BTreeSet<*mut Node>` provides with identical semantics (raw pointers have a
//! total `Ord`).

use crate::records::node::Node;
use alloc::collections::BTreeSet;

#[derive(Debug, Clone, Default)]
pub struct Arcs {
    pub(crate) provides: BTreeSet<*mut Node>,
    pub(crate) depends: BTreeSet<*mut Node>,
}

impl Arcs {
    pub fn new() -> Self {
        Self {
            provides: BTreeSet::new(),
            depends: BTreeSet::new(),
        }
    }
}
