use indexmap::{IndexMap, IndexSet};
use crate::collect::{Collect, Trace};
unsafe impl<'gc, K, V, S> Collect<'gc> for IndexMap<K, V, S>
where
K: Collect<'gc>,
V: Collect<'gc>,
S: 'static,
{
const NEEDS_TRACE: bool = K::NEEDS_TRACE || V::NEEDS_TRACE;
#[inline]
fn trace<C: Trace<'gc>>(&self, cc: &mut C) {
if Self::NEEDS_TRACE {
for (k, v) in self {
cc.trace(k);
cc.trace(v);
}
}
}
}
unsafe impl<'gc, T, S> Collect<'gc> for IndexSet<T, S>
where
T: Collect<'gc>,
S: 'static,
{
const NEEDS_TRACE: bool = T::NEEDS_TRACE;
#[inline]
fn trace<C: Trace<'gc>>(&self, cc: &mut C) {
if T::NEEDS_TRACE {
for v in self {
cc.trace(v);
}
}
}
}