Skip to main content

embedded_buffer_pool/
macros.rs

1//! Declarative macros.
2
3/// Builds `[T; N]` by repeating the same expression `N` times in the source.
4///
5/// Use this where `[expr; N]` is invalid (non-[`Copy`] `T`, or you need distinct
6/// evaluations of `expr`). Each array element is a separate copy of `expr` in the
7/// expansion, so `array_new!(Buf::new(), 3)` calls `Buf::new()` three times.
8///
9/// The first argument may be any expression valid in the surrounding context: a
10/// constructor call, a literal, a `const` name, or other [`const`]-evaluable value.
11///
12/// `N` must be a literal from **0 through 32** (inclusive). [`crate::BufferPool`]
13/// accepts **1 through 32** slots (`N == 0` is only for non-pool array construction).
14///
15/// # Examples
16///
17/// ```
18/// use embedded_buffer_pool::array_new;
19///
20/// const ROW: [u8; 2] = [1, 2];
21/// static GRID: [[u8; 2]; 3] = array_new!(ROW, 3);
22///
23/// struct Buf([u8; 4]);
24/// impl Buf {
25///     const fn new() -> Self {
26///         Self([0; 4])
27///     }
28/// }
29///
30/// static BUFFERS: [Buf; 2] = array_new!(Buf::new(), 2);
31/// ```
32#[macro_export]
33macro_rules! array_new {
34    ($e:expr, 0) => { [] };
35    ($e:expr, 1) => { [$e] };
36    ($e:expr, 2) => { [$e, $e] };
37    ($e:expr, 3) => { [$e, $e, $e] };
38    ($e:expr, 4) => { [$e, $e, $e, $e] };
39    ($e:expr, 5) => { [$e, $e, $e, $e, $e] };
40    ($e:expr, 6) => { [$e, $e, $e, $e, $e, $e] };
41    ($e:expr, 7) => { [$e, $e, $e, $e, $e, $e, $e] };
42    ($e:expr, 8) => { [$e, $e, $e, $e, $e, $e, $e, $e] };
43    ($e:expr, 9) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e] };
44    ($e:expr, 10) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
45    ($e:expr, 11) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
46    ($e:expr, 12) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
47    ($e:expr, 13) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
48    ($e:expr, 14) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
49    ($e:expr, 15) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
50    ($e:expr, 16) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
51    ($e:expr, 17) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
52    ($e:expr, 18) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
53    ($e:expr, 19) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
54    ($e:expr, 20) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
55    ($e:expr, 21) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
56    ($e:expr, 22) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
57    ($e:expr, 23) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
58    ($e:expr, 24) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
59    ($e:expr, 25) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
60    ($e:expr, 26) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
61    ($e:expr, 27) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
62    ($e:expr, 28) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
63    ($e:expr, 29) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
64    ($e:expr, 30) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
65    ($e:expr, 31) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
66    ($e:expr, 32) => { [$e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e, $e] };
67}