object_rainbow/impls/
array.rs

1use std::ops::Mul;
2
3use typenum::ToUInt;
4
5use crate::*;
6
7impl<T: ToOutput, const N: usize> ToOutput for [T; N] {
8    fn to_output(&self, output: &mut dyn Output) {
9        T::slice_to_output(self, output);
10    }
11}
12
13impl<T: Topological, const N: usize> Topological for [T; N] {
14    fn accept_points(&self, visitor: &mut impl PointVisitor) {
15        self.iter_accept_points(visitor);
16    }
17}
18
19impl<T: Tagged, const N: usize> Tagged for [T; N] {
20    const TAGS: Tags = T::TAGS;
21}
22
23impl<T: Size, const N: usize> Size for [T; N]
24where
25    typenum::generic_const_mappings::Const<N>:
26        ToUInt<Output: Unsigned + Mul<T::Size, Output: Unsigned>>,
27{
28    const SIZE: usize = T::SIZE * N;
29    type Size =
30        <<typenum::generic_const_mappings::Const<N> as ToUInt>::Output as Mul<T::Size>>::Output;
31}