zerovec/map2d/
databake.rs

1// This file is part of ICU4X. For terms of use, please see the file
2// called LICENSE at the top level of the ICU4X source tree
3// (online at: https://github.com/unicode-org/icu4x/blob/main/LICENSE ).
4
5use crate::{maps::ZeroMap2dBorrowed, maps::ZeroMapKV, ZeroMap2d};
6use databake::*;
7
8impl<'a, K0, K1, V> Bake for ZeroMap2d<'a, K0, K1, V>
9where
10    K0: ZeroMapKV<'a> + ?Sized,
11    K1: ZeroMapKV<'a> + ?Sized,
12    V: ZeroMapKV<'a> + ?Sized,
13    K0::Container: Bake,
14    K1::Container: Bake,
15    V::Container: Bake,
16{
17    fn bake(&self, env: &CrateEnv) -> TokenStream {
18        env.insert("zerovec");
19        let keys0 = self.keys0.bake(env);
20        let joiner = self.joiner.bake(env);
21        let keys1 = self.keys1.bake(env);
22        let values = self.values.bake(env);
23        quote! { unsafe { #[allow(unused_unsafe)] zerovec::ZeroMap2d::from_parts_unchecked(#keys0, #joiner, #keys1, #values) } }
24    }
25}
26
27impl<'a, K0, K1, V> BakeSize for ZeroMap2d<'a, K0, K1, V>
28where
29    K0: ZeroMapKV<'a> + ?Sized,
30    K1: ZeroMapKV<'a> + ?Sized,
31    V: ZeroMapKV<'a> + ?Sized,
32    K0::Container: BakeSize,
33    K1::Container: BakeSize,
34    V::Container: BakeSize,
35{
36    fn borrows_size(&self) -> usize {
37        self.keys0.borrows_size()
38            + self.joiner.borrows_size()
39            + self.keys1.borrows_size()
40            + self.values.borrows_size()
41    }
42}
43
44impl<'a, K0, K1, V> Bake for ZeroMap2dBorrowed<'a, K0, K1, V>
45where
46    K0: ZeroMapKV<'a> + ?Sized,
47    K1: ZeroMapKV<'a> + ?Sized,
48    V: ZeroMapKV<'a> + ?Sized,
49    &'a K0::Slice: Bake,
50    &'a K1::Slice: Bake,
51    &'a V::Slice: Bake,
52{
53    fn bake(&self, env: &CrateEnv) -> TokenStream {
54        env.insert("zerovec");
55        let keys0 = self.keys0.bake(env);
56        let joiner = self.joiner.bake(env);
57        let keys1 = self.keys1.bake(env);
58        let values = self.values.bake(env);
59        quote! { unsafe { #[allow(unused_unsafe)] zerovec::maps::ZeroMap2dBorrowed::from_parts_unchecked(#keys0, #joiner, #keys1, #values) } }
60    }
61}
62
63impl<'a, K0, K1, V> BakeSize for ZeroMap2dBorrowed<'a, K0, K1, V>
64where
65    K0: ZeroMapKV<'a> + ?Sized,
66    K1: ZeroMapKV<'a> + ?Sized,
67    V: ZeroMapKV<'a> + ?Sized,
68    &'a K0::Slice: BakeSize,
69    &'a K1::Slice: BakeSize,
70    &'a V::Slice: BakeSize,
71{
72    fn borrows_size(&self) -> usize {
73        self.keys0.borrows_size()
74            + self.joiner.borrows_size()
75            + self.keys1.borrows_size()
76            + self.values.borrows_size()
77    }
78}
79
80#[test]
81fn test_baked_map() {
82    test_bake!(
83        ZeroMap2d<str, str, str>,
84        const,
85        unsafe {
86            #[allow(unused_unsafe)]
87            crate::ZeroMap2d::from_parts_unchecked(
88                unsafe {
89                    crate::vecs::VarZeroVec16::from_bytes_unchecked(
90                        b"\x0E\0\0\0\0\0\x05\0\x07\0\t\0\x0B\0\x10\0\x12\0\x14\0\x1C\0\x1E\0#\0%\0'\0,\0arcazcuenffgrckkkukylifmanmnpapalsdtgugunruzyuezh"
91                    )
92                },
93                unsafe {
94                    crate::ZeroVec::from_bytes_unchecked(
95                        b"\x02\0\0\0\x03\0\0\0\x04\0\0\0\x05\0\0\0\x06\0\0\0\x07\0\0\0\x08\0\0\0\n\0\0\0\x0C\0\0\0\r\0\0\0\x0E\0\0\0\x0F\0\0\0\x10\0\0\0\x11\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x18\0\0\0\x19\0\0\0\x1C\0\0\0"
96                    )
97                },
98                unsafe {
99                    crate::vecs::VarZeroVec16::from_bytes_unchecked(
100                        b"\x1C\0\0\0\0\0\x04\0\x08\0\x0C\0\x10\0\x14\0\x18\0\x1C\0 \0$\0(\0,\x000\x004\08\0<\0@\0D\0H\0L\0P\0T\0X\0\\\0`\0d\0h\0l\0NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant"
101                    )
102                },
103                unsafe {
104                    crate::vecs::VarZeroVec16::from_bytes_unchecked(
105                        b"\x1C\0\0\0\0\0\x02\0\x04\0\x06\0\x08\0\n\0\x0C\0\x0E\0\x10\0\x12\0\x14\0\x16\0\x18\0\x1A\0\x1C\0\x1E\0 \0\"\0$\0&\0(\0*\0,\0.\x000\x002\x004\x006\0JOSYIRBGGBGNGRCNIQGECNTRINGNCNPKCNINININPKKZNPAFCNTWTWTW"
106                    )
107                },
108            )
109        },
110        zerovec
111    );
112}
113
114#[test]
115fn test_baked_borrowed_map() {
116    test_bake!(
117        ZeroMap2dBorrowed<str, str, str>,
118        const,
119        unsafe {
120            #[allow(unused_unsafe)]
121            crate::maps::ZeroMap2dBorrowed::from_parts_unchecked(
122                unsafe {
123                    crate::vecs::VarZeroSlice16::from_bytes_unchecked(
124                        b"\x0E\0\0\0\0\0\x05\0\x07\0\t\0\x0B\0\x10\0\x12\0\x14\0\x1C\0\x1E\0#\0%\0'\0,\0arcazcuenffgrckkkukylifmanmnpapalsdtgugunruzyuezh"
125                    )
126                },
127                unsafe {
128                    crate::ZeroSlice::from_bytes_unchecked(
129                        b"\x02\0\0\0\x03\0\0\0\x04\0\0\0\x05\0\0\0\x06\0\0\0\x07\0\0\0\x08\0\0\0\n\0\0\0\x0C\0\0\0\r\0\0\0\x0E\0\0\0\x0F\0\0\0\x10\0\0\0\x11\0\0\0\x14\0\0\0\x15\0\0\0\x16\0\0\0\x17\0\0\0\x18\0\0\0\x19\0\0\0\x1C\0\0\0"
130                    )
131                },
132                unsafe {
133                    crate::vecs::VarZeroSlice16::from_bytes_unchecked(
134                        b"\x1C\0\0\0\0\0\x04\0\x08\0\x0C\0\x10\0\x14\0\x18\0\x1C\0 \0$\0(\0,\x000\x004\08\0<\0@\0D\0H\0L\0P\0T\0X\0\\\0`\0d\0h\0l\0NbatPalmArabGlagShawAdlmLinbArabArabYeziArabLatnLimbNkooMongArabPhlpDevaKhojSindArabCyrlDevaArabHansBopoHanbHant"
135                    )
136                },
137                unsafe {
138                    crate::vecs::VarZeroSlice16::from_bytes_unchecked(
139                        b"\x1C\0\0\0\0\0\x02\0\x04\0\x06\0\x08\0\n\0\x0C\0\x0E\0\x10\0\x12\0\x14\0\x16\0\x18\0\x1A\0\x1C\0\x1E\0 \0\"\0$\0&\0(\0*\0,\0.\x000\x002\x004\x006\0JOSYIRBGGBGNGRCNIQGECNTRINGNCNPKCNINININPKKZNPAFCNTWTWTW"
140                    )
141                },
142            )
143        },
144        zerovec
145    );
146}