jay-compositor 1.14.0

The Jay compositor
use {
    ahash::AHashMap,
    smallvec::{Array, SmallVec},
};

#[allow(clippy::allow_attributes, dead_code)]
pub trait Reset: Default {
    fn reset(&mut self);
}

impl<T: Array> Reset for SmallVec<T> {
    fn reset(&mut self) {
        self.clear();
    }
}

impl<T> Reset for Option<T> {
    fn reset(&mut self) {
        *self = None;
    }
}

impl<T> Reset for Vec<T> {
    fn reset(&mut self) {
        self.clear();
    }
}

impl<K, V> Reset for AHashMap<K, V> {
    fn reset(&mut self) {
        self.clear();
    }
}

impl Reset for bool {
    fn reset(&mut self) {
        *self = false;
    }
}

impl Reset for i32 {
    fn reset(&mut self) {
        *self = 0;
    }
}

macro_rules! tuples {
    ($($id:ident,)*) => {
        impl<$($id,)*> Reset for ($($id,)*) where $($id: Reset,)* {
            #[expect(non_snake_case)]
            fn reset(&mut self) {
                let ($($id,)*) = self;
                $($id.reset();)*
            }
        }
    };
}

tuples!(I0,);
tuples!(I0, I1,);