1use std::fmt::{self, Debug};
2use std::hash::{Hash};
3use std::iter::{Chain, FusedIterator};
4use std::marker::PhantomData;
5
6use crate::expr::IndexedCaptures;
7use crate::haystack::{HaystackItem, HaystackOf};
8use crate::matcher::Matcher;
9
10#[derive(#[automatically_derived]
impl<I: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<I>, B: ::core::default::Default + Matcher<I>>
::core::default::Default for Or<I, A, B> {
#[inline]
fn default() -> Or<I, A, B> {
Or(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}Default, #[automatically_derived]
impl<I: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<I>, B: ::core::clone::Clone + Matcher<I>> ::core::clone::Clone for
Or<I, A, B> {
#[inline]
fn clone(&self) -> Or<I, A, B> {
Or(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2))
}
}Clone, #[automatically_derived]
impl<I: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<I>, B: ::core::marker::Copy + Matcher<I>> ::core::marker::Copy for
Or<I, A, B> {
}Copy)]
11pub struct Or<I: HaystackItem, A: Matcher<I>, B: Matcher<I>>(
12 pub PhantomData<I>,
13 pub PhantomData<A>,
14 pub PhantomData<B>,
15);
16
17pub type AllMatchesOr<'a, I, H, A, B> = Chain<
18 <A as Matcher<I>>::AllMatches<'a, H>,
19 <B as Matcher<I>>::AllMatches<'a, H>
20>;
21pub type AllCapturesOr<'a, I, H, A, B> = Chain<
22 <A as Matcher<I>>::AllCaptures<'a, H>,
23 <B as Matcher<I>>::AllCaptures<'a, H>
24>;
25
26impl<I: HaystackItem, A: Matcher<I>, B: Matcher<I>> Matcher<I> for Or<I, A, B> {
27 type AllMatches<'a, H: HaystackOf<'a, I>> = AllMatchesOr<'a, I, H, A, B>;
28 type AllCaptures<'a, H: HaystackOf<'a, I>> = AllCapturesOr<'a, I, H, A, B>;
29
30 fn matches<'a, H: HaystackOf<'a, I>>(hay: &mut H) -> bool {
31 let start = hay.index();
32
33 if A::matches(hay) {
34 true
35 } else {
36 hay.rollback(start);
37 B::matches(hay)
38 }
39 }
40
41 fn all_matches<'a, H: HaystackOf<'a, I>>(hay: &mut H) -> Self::AllMatches<'a, H> {
43 let state_fork = hay.index();
44 let a_matches = A::all_matches(hay);
46 hay.rollback(state_fork);
47 a_matches.chain(B::all_matches(hay))
48 }
49
50 fn captures<'a, H: HaystackOf<'a, I>>(hay: &mut H, caps: &mut IndexedCaptures) -> bool {
51 let (initial_state, initial_caps) = (hay.index(), caps.clone());
52 if A::captures(hay, caps) {
53 true
54 } else {
55 hay.rollback(initial_state);
56 *caps = initial_caps;
57 B::captures(hay, caps)
58 }
59 }
60
61 fn all_captures<'a, H: HaystackOf<'a, I>>(
62 hay: &mut H,
63 caps: &mut IndexedCaptures,
64 ) -> Self::AllCaptures<'a, H> {
65 let (state_fork, mut caps_fork) = (hay.index(), caps.clone());
66
67 let a_captures = A::all_captures(hay, caps);
68 hay.rollback(state_fork);
69 a_captures.chain(B::all_captures(hay, &mut caps_fork))
70 }
71}
72
73impl<I: HaystackItem, A: Matcher<I>, B: Matcher<I>> Debug for Or<I, A, B> {
74 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
75 f.write_fmt(format_args!("{0:?}|{1:?}", A::default(), B::default()))write!(f, "{:?}|{:?}", A::default(), B::default())
76 }
77}
78
79#[derive(#[automatically_derived]
impl<'a, I: ::core::fmt::Debug + HaystackItem, H: ::core::fmt::Debug +
HaystackOf<'a, I>, A: ::core::fmt::Debug + Matcher<I>,
B: ::core::fmt::Debug + Matcher<I>> ::core::fmt::Debug for
AllMatchesThen<'a, I, H, A, B> where
A::AllMatches<'a, H>: ::core::fmt::Debug,
B::AllMatches<'a, H>: ::core::fmt::Debug {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"AllMatchesThen", "a_matches", &self.a_matches, "b_matches",
&self.b_matches, "hay", &&self.hay)
}
}Debug, #[automatically_derived]
impl<'a, I: ::core::clone::Clone + HaystackItem, H: ::core::clone::Clone +
HaystackOf<'a, I>, A: ::core::clone::Clone + Matcher<I>,
B: ::core::clone::Clone + Matcher<I>> ::core::clone::Clone for
AllMatchesThen<'a, I, H, A, B> where
A::AllMatches<'a, H>: ::core::clone::Clone,
B::AllMatches<'a, H>: ::core::clone::Clone {
#[inline]
fn clone(&self) -> AllMatchesThen<'a, I, H, A, B> {
AllMatchesThen {
a_matches: ::core::clone::Clone::clone(&self.a_matches),
b_matches: ::core::clone::Clone::clone(&self.b_matches),
hay: ::core::clone::Clone::clone(&self.hay),
}
}
}Clone, #[automatically_derived]
impl<'a, I: ::core::hash::Hash + HaystackItem, H: ::core::hash::Hash +
HaystackOf<'a, I>, A: ::core::hash::Hash + Matcher<I>,
B: ::core::hash::Hash + Matcher<I>> ::core::hash::Hash for
AllMatchesThen<'a, I, H, A, B> where
A::AllMatches<'a, H>: ::core::hash::Hash,
B::AllMatches<'a, H>: ::core::hash::Hash {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.a_matches, state);
::core::hash::Hash::hash(&self.b_matches, state);
::core::hash::Hash::hash(&self.hay, state)
}
}Hash)]
80pub struct AllMatchesThen<'a, I: HaystackItem, H: HaystackOf<'a, I>, A: Matcher<I>, B: Matcher<I>> {
81 a_matches: A::AllMatches<'a, H>,
82 b_matches: Option<B::AllMatches<'a, H>>,
83 hay: H,
84}
85
86impl<'a, I, H, A, B> Iterator for AllMatchesThen<'a, I, H, A, B>
87where
88 I: HaystackItem,
89 H: HaystackOf<'a, I>,
90 A: Matcher<I>,
91 B: Matcher<I>,
92{
93 type Item = usize;
94
95 fn next(&mut self) -> Option<Self::Item> {
96 match self.b_matches.as_mut().and_then(Iterator::next) {
97 Some(b) => Some(b),
98 None => {
99 self.hay.rollback(self.a_matches.next()?);
100 self.b_matches = Some(B::all_matches(&mut self.hay));
101 self.next()
102 },
103 }
104 }
105}
106
107impl<'a, I, H, A, B> FusedIterator for AllMatchesThen<'a, I, H, A, B>
108where
109 I: HaystackItem,
110 H: HaystackOf<'a, I>,
111 A: Matcher<I>,
112 B: Matcher<I>,
113{}
114
115#[derive(#[automatically_derived]
impl<'a, I: ::core::fmt::Debug, H: ::core::fmt::Debug, A: ::core::fmt::Debug,
B: ::core::fmt::Debug> ::core::fmt::Debug for
AllCapturesThen<'a, I, H, A, B> where I: HaystackItem,
H: HaystackOf<'a, I>, A: Matcher<I>, B: Matcher<I>,
A::AllCaptures<'a, H>: ::core::fmt::Debug,
B::AllCaptures<'a, H>: ::core::fmt::Debug {
#[inline]
fn fmt(&self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result {
::core::fmt::Formatter::debug_struct_field3_finish(f,
"AllCapturesThen", "a_captures", &self.a_captures, "b_captures",
&self.b_captures, "hay", &&self.hay)
}
}Debug, #[automatically_derived]
impl<'a, I: ::core::clone::Clone, H: ::core::clone::Clone,
A: ::core::clone::Clone, B: ::core::clone::Clone> ::core::clone::Clone for
AllCapturesThen<'a, I, H, A, B> where I: HaystackItem,
H: HaystackOf<'a, I>, A: Matcher<I>, B: Matcher<I>,
A::AllCaptures<'a, H>: ::core::clone::Clone,
B::AllCaptures<'a, H>: ::core::clone::Clone {
#[inline]
fn clone(&self) -> AllCapturesThen<'a, I, H, A, B> {
AllCapturesThen {
a_captures: ::core::clone::Clone::clone(&self.a_captures),
b_captures: ::core::clone::Clone::clone(&self.b_captures),
hay: ::core::clone::Clone::clone(&self.hay),
}
}
}Clone, #[automatically_derived]
impl<'a, I: ::core::hash::Hash, H: ::core::hash::Hash, A: ::core::hash::Hash,
B: ::core::hash::Hash> ::core::hash::Hash for
AllCapturesThen<'a, I, H, A, B> where I: HaystackItem,
H: HaystackOf<'a, I>, A: Matcher<I>, B: Matcher<I>,
A::AllCaptures<'a, H>: ::core::hash::Hash,
B::AllCaptures<'a, H>: ::core::hash::Hash {
#[inline]
fn hash<__H: ::core::hash::Hasher>(&self, state: &mut __H) {
::core::hash::Hash::hash(&self.a_captures, state);
::core::hash::Hash::hash(&self.b_captures, state);
::core::hash::Hash::hash(&self.hay, state)
}
}Hash)]
116pub struct AllCapturesThen<'a, I, H, A, B>
117where
118 I: HaystackItem,
119 H: HaystackOf<'a, I>,
120 A: Matcher<I>,
121 B: Matcher<I>,
122{
123 a_captures: A::AllCaptures<'a, H>,
124 b_captures: Option<B::AllCaptures<'a, H>>,
125 hay: H,
126}
127
128impl<'a, I, H, A, B> Iterator for AllCapturesThen<'a, I, H, A, B>
129where
130 I: HaystackItem,
131 H: HaystackOf<'a, I>,
132 A: Matcher<I>,
133 B: Matcher<I>,
134{
135 type Item = (usize, IndexedCaptures);
136
137 fn next(&mut self) -> Option<Self::Item> {
138 match self.b_captures.as_mut().and_then(Iterator::next) {
139 Some(b) => Some(b),
140 None => {
141 let (state_fork, mut caps_fork) = self.a_captures.next()?;
142 self.hay.rollback(state_fork);
143 self.b_captures = Some(B::all_captures(&mut self.hay, &mut caps_fork));
144 self.next()
145 },
146 }
147 }
148}
149
150impl<'a, I, H, A, B> FusedIterator for AllCapturesThen<'a, I, H, A, B>
151where
152 I: HaystackItem,
153 H: HaystackOf<'a, I>,
154 A: Matcher<I>,
155 B: Matcher<I>,
156{}
157
158#[derive(#[automatically_derived]
impl<I: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<I>, B: ::core::default::Default + Matcher<I>>
::core::default::Default for Then<I, A, B> {
#[inline]
fn default() -> Then<I, A, B> {
Then(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}Default, #[automatically_derived]
impl<I: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<I>, B: ::core::clone::Clone + Matcher<I>> ::core::clone::Clone for
Then<I, A, B> {
#[inline]
fn clone(&self) -> Then<I, A, B> {
Then(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2))
}
}Clone, #[automatically_derived]
impl<I: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<I>, B: ::core::marker::Copy + Matcher<I>> ::core::marker::Copy for
Then<I, A, B> {
}Copy)]
159pub struct Then<I: HaystackItem, A: Matcher<I>, B: Matcher<I>>(
160 pub PhantomData<I>,
161 pub PhantomData<A>,
162 pub PhantomData<B>,
163);
164
165impl<I: HaystackItem, A: Matcher<I>, B: Matcher<I>> Matcher<I> for Then<I, A, B> {
166 type AllMatches<'a, H: HaystackOf<'a, I>> = AllMatchesThen<'a, I, H, A, B>;
167 type AllCaptures<'a, H: HaystackOf<'a, I>> = AllCapturesThen<'a, I, H, A, B>;
168
169 fn matches<'a, H: HaystackOf<'a, I>>(hay: &mut H) -> bool {
170 if let Some(state_fork) = Self::all_matches(hay).next() {
171 hay.rollback(state_fork);
172 true
173 } else {
174 false
175 }
176 }
177
178 fn all_matches<'a, H: HaystackOf<'a, I>>(hay: &mut H) -> Self::AllMatches<'a, H> {
179 AllMatchesThen {
180 a_matches: A::all_matches(hay),
181 b_matches: None,
182 hay: hay.clone(),
185 }
186 }
187
188 fn captures<'a, H: HaystackOf<'a, I>>(hay: &mut H, caps: &mut IndexedCaptures) -> bool {
189 if let Some((state_fork, caps_fork)) = Self::all_captures(hay, caps).next() {
190 hay.rollback(state_fork);
191 *caps = caps_fork;
192 true
193 } else {
194 false
195 }
196 }
197
198 fn all_captures<'a, H: HaystackOf<'a, I>>(
199 hay: &mut H,
200 caps: &mut IndexedCaptures,
201 ) -> Self::AllCaptures<'a, H> {
202 AllCapturesThen {
203 a_captures: A::all_captures(hay, caps),
204 b_captures: None,
205 hay: hay.clone(),
206 }
207 }
208}
209
210impl<I: HaystackItem, A: Matcher<I>, B: Matcher<I>> Debug for Then<I, A, B> {
211 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
212 f.write_fmt(format_args!("{0:?}{1:?}", A::default(), B::default()))write!(f, "{:?}{:?}", A::default(), B::default())
213 }
214}
215
216macro_rules! define_paired_n {
226 ($pair:ident, $all_matches:ident, $name:ident, $combiner:ident, $([$a:ident $b:ident])+) => {
227 #[derive(Default, Clone, Copy)]
228 pub struct $name<
229 Z: HaystackItem,
230 $($a: Matcher<Z>, $b: Matcher<Z>),+
231 >(
232 pub PhantomData<Z>,
233 $(pub PhantomData<$a>, pub PhantomData<$b>),+
234 );
235
236 impl<
237 Z: HaystackItem,
238 $($a: Matcher<Z>, $b: Matcher<Z>),+
239 > Matcher<Z> for $name<Z, $($a, $b),+> {
240 type AllMatches<'a, Y: HaystackOf<'a, Z>> = <
241 $combiner::<Z, $($pair<Z, $a, $b>),+> as Matcher<Z>
242 >::AllMatches<'a, Y>;
243
244 type AllCaptures<'a, Y: HaystackOf<'a, Z>> = <
245 $combiner::<Z, $($pair<Z, $a, $b>),+> as Matcher<Z>
246 >::AllCaptures<'a, Y>;
247
248 fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
249 $combiner::<Z, $($pair<Z, $a, $b>),+>::matches(hay)
250 }
251
252 fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> Self::AllMatches<'a, Y> {
253 $combiner::<Z, $($pair<Z, $a, $b>),+>::all_matches(hay)
254 }
255
256 fn captures<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures) -> bool {
257 $combiner::<Z, $($pair<Z, $a, $b>),+>::captures(hay, caps)
258 }
259
260 fn all_captures<'a, Y: HaystackOf<'a, Z>>(
261 hay: &mut Y,
262 caps: &mut IndexedCaptures
263 ) -> Self::AllCaptures<'a, Y> {
264 $combiner::<Z, $($pair<Z, $a, $b>),+>::all_captures(hay, caps)
265 }
266 }
267
268 impl<Z: HaystackItem, $($a: Matcher<Z>, $b: Matcher<Z>),+> Debug for $name<Z, $($a, $b),+> {
269 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
270 write!(f, "{:?}", $combiner::<Z, $($pair<Z, $a, $b>),+>::default())
271 }
272 }
273 };
274}
275
276pub struct Or4<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>>(pub PhantomData<Z>, pub PhantomData<A>, pub PhantomData<B>,
pub PhantomData<C>, pub PhantomData<D>);
#[automatically_derived]
impl<Z: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<Z>, B: ::core::default::Default + Matcher<Z>,
C: ::core::default::Default + Matcher<Z>, D: ::core::default::Default +
Matcher<Z>> ::core::default::Default for Or4<Z, A, B, C, D> {
#[inline]
fn default() -> Or4<Z, A, B, C, D> {
Or4(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}
#[automatically_derived]
impl<Z: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<Z>, B: ::core::clone::Clone + Matcher<Z>,
C: ::core::clone::Clone + Matcher<Z>, D: ::core::clone::Clone +
Matcher<Z>> ::core::clone::Clone for Or4<Z, A, B, C, D> {
#[inline]
fn clone(&self) -> Or4<Z, A, B, C, D> {
Or4(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2),
::core::clone::Clone::clone(&self.3),
::core::clone::Clone::clone(&self.4))
}
}
#[automatically_derived]
impl<Z: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<Z>, B: ::core::marker::Copy + Matcher<Z>,
C: ::core::marker::Copy + Matcher<Z>, D: ::core::marker::Copy +
Matcher<Z>> ::core::marker::Copy for Or4<Z, A, B, C, D> {
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>> Matcher<Z> for Or4<Z, A, B, C, D> {
type AllMatches<'a, Y: HaystackOf<'a, Z>> =
<Or<Z, Or<Z, A, B>, Or<Z, C, D>> as Matcher<Z>>::AllMatches<'a, Y>;
type AllCaptures<'a, Y: HaystackOf<'a, Z>> =
<Or<Z, Or<Z, A, B>, Or<Z, C, D>> as Matcher<Z>>::AllCaptures<'a, Y>;
fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
Or::<Z, Or<Z, A, B>, Or<Z, C, D>>::matches(hay)
}
fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y)
-> Self::AllMatches<'a, Y> {
Or::<Z, Or<Z, A, B>, Or<Z, C, D>>::all_matches(hay)
}
fn captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> bool {
Or::<Z, Or<Z, A, B>, Or<Z, C, D>>::captures(hay, caps)
}
fn all_captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> Self::AllCaptures<'a, Y> {
Or::<Z, Or<Z, A, B>, Or<Z, C, D>>::all_captures(hay, caps)
}
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>> Debug for Or4<Z, A, B, C, D> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("{0:?}",
Or::<Z, Or<Z, A, B>, Or<Z, C, D>>::default()))
}
}define_paired_n!(Or, AllMatchesOr, Or4, Or, [A B] [C D]);
277pub struct Or8<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>,
H: Matcher<Z>>(pub PhantomData<Z>, pub PhantomData<A>, pub PhantomData<B>,
pub PhantomData<C>, pub PhantomData<D>, pub PhantomData<E>,
pub PhantomData<F>, pub PhantomData<G>, pub PhantomData<H>);
#[automatically_derived]
impl<Z: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<Z>, B: ::core::default::Default + Matcher<Z>,
C: ::core::default::Default + Matcher<Z>, D: ::core::default::Default +
Matcher<Z>, E: ::core::default::Default + Matcher<Z>,
F: ::core::default::Default + Matcher<Z>, G: ::core::default::Default +
Matcher<Z>, H: ::core::default::Default + Matcher<Z>>
::core::default::Default for Or8<Z, A, B, C, D, E, F, G, H> {
#[inline]
fn default() -> Or8<Z, A, B, C, D, E, F, G, H> {
Or8(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}
#[automatically_derived]
impl<Z: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<Z>, B: ::core::clone::Clone + Matcher<Z>,
C: ::core::clone::Clone + Matcher<Z>, D: ::core::clone::Clone +
Matcher<Z>, E: ::core::clone::Clone + Matcher<Z>,
F: ::core::clone::Clone + Matcher<Z>, G: ::core::clone::Clone +
Matcher<Z>, H: ::core::clone::Clone + Matcher<Z>> ::core::clone::Clone for
Or8<Z, A, B, C, D, E, F, G, H> {
#[inline]
fn clone(&self) -> Or8<Z, A, B, C, D, E, F, G, H> {
Or8(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2),
::core::clone::Clone::clone(&self.3),
::core::clone::Clone::clone(&self.4),
::core::clone::Clone::clone(&self.5),
::core::clone::Clone::clone(&self.6),
::core::clone::Clone::clone(&self.7),
::core::clone::Clone::clone(&self.8))
}
}
#[automatically_derived]
impl<Z: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<Z>, B: ::core::marker::Copy + Matcher<Z>,
C: ::core::marker::Copy + Matcher<Z>, D: ::core::marker::Copy +
Matcher<Z>, E: ::core::marker::Copy + Matcher<Z>,
F: ::core::marker::Copy + Matcher<Z>, G: ::core::marker::Copy +
Matcher<Z>, H: ::core::marker::Copy + Matcher<Z>> ::core::marker::Copy for
Or8<Z, A, B, C, D, E, F, G, H> {
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>>
Matcher<Z> for Or8<Z, A, B, C, D, E, F, G, H> {
type AllMatches<'a, Y: HaystackOf<'a, Z>> =
<Or4<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>> as
Matcher<Z>>::AllMatches<'a, Y>;
type AllCaptures<'a, Y: HaystackOf<'a, Z>> =
<Or4<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>> as
Matcher<Z>>::AllCaptures<'a, Y>;
fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
Or4::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>,
Or<Z, G, H>>::matches(hay)
}
fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y)
-> Self::AllMatches<'a, Y> {
Or4::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>,
Or<Z, G, H>>::all_matches(hay)
}
fn captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> bool {
Or4::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>,
Or<Z, G, H>>::captures(hay, caps)
}
fn all_captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> Self::AllCaptures<'a, Y> {
Or4::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>,
Or<Z, G, H>>::all_captures(hay, caps)
}
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>>
Debug for Or8<Z, A, B, C, D, E, F, G, H> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("{0:?}",
Or4::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>,
Or<Z, G, H>>::default()))
}
}define_paired_n!(Or, AllMatchesOr, Or8, Or4, [A B] [C D] [E F] [G H]);
278pub struct Or16<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>,
I: Matcher<Z>, J: Matcher<Z>, K: Matcher<Z>, L: Matcher<Z>, M: Matcher<Z>,
N: Matcher<Z>, O: Matcher<Z>,
P: Matcher<Z>>(pub PhantomData<Z>, pub PhantomData<A>, pub PhantomData<B>,
pub PhantomData<C>, pub PhantomData<D>, pub PhantomData<E>,
pub PhantomData<F>, pub PhantomData<G>, pub PhantomData<H>,
pub PhantomData<I>, pub PhantomData<J>, pub PhantomData<K>,
pub PhantomData<L>, pub PhantomData<M>, pub PhantomData<N>,
pub PhantomData<O>, pub PhantomData<P>);
#[automatically_derived]
impl<Z: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<Z>, B: ::core::default::Default + Matcher<Z>,
C: ::core::default::Default + Matcher<Z>, D: ::core::default::Default +
Matcher<Z>, E: ::core::default::Default + Matcher<Z>,
F: ::core::default::Default + Matcher<Z>, G: ::core::default::Default +
Matcher<Z>, H: ::core::default::Default + Matcher<Z>,
I: ::core::default::Default + Matcher<Z>, J: ::core::default::Default +
Matcher<Z>, K: ::core::default::Default + Matcher<Z>,
L: ::core::default::Default + Matcher<Z>, M: ::core::default::Default +
Matcher<Z>, N: ::core::default::Default + Matcher<Z>,
O: ::core::default::Default + Matcher<Z>, P: ::core::default::Default +
Matcher<Z>> ::core::default::Default for
Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
#[inline]
fn default() -> Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
Or16(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}
#[automatically_derived]
impl<Z: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<Z>, B: ::core::clone::Clone + Matcher<Z>,
C: ::core::clone::Clone + Matcher<Z>, D: ::core::clone::Clone +
Matcher<Z>, E: ::core::clone::Clone + Matcher<Z>,
F: ::core::clone::Clone + Matcher<Z>, G: ::core::clone::Clone +
Matcher<Z>, H: ::core::clone::Clone + Matcher<Z>,
I: ::core::clone::Clone + Matcher<Z>, J: ::core::clone::Clone +
Matcher<Z>, K: ::core::clone::Clone + Matcher<Z>,
L: ::core::clone::Clone + Matcher<Z>, M: ::core::clone::Clone +
Matcher<Z>, N: ::core::clone::Clone + Matcher<Z>,
O: ::core::clone::Clone + Matcher<Z>, P: ::core::clone::Clone +
Matcher<Z>> ::core::clone::Clone for
Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
#[inline]
fn clone(&self)
-> Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
Or16(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2),
::core::clone::Clone::clone(&self.3),
::core::clone::Clone::clone(&self.4),
::core::clone::Clone::clone(&self.5),
::core::clone::Clone::clone(&self.6),
::core::clone::Clone::clone(&self.7),
::core::clone::Clone::clone(&self.8),
::core::clone::Clone::clone(&self.9),
::core::clone::Clone::clone(&self.10),
::core::clone::Clone::clone(&self.11),
::core::clone::Clone::clone(&self.12),
::core::clone::Clone::clone(&self.13),
::core::clone::Clone::clone(&self.14),
::core::clone::Clone::clone(&self.15),
::core::clone::Clone::clone(&self.16))
}
}
#[automatically_derived]
impl<Z: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<Z>, B: ::core::marker::Copy + Matcher<Z>,
C: ::core::marker::Copy + Matcher<Z>, D: ::core::marker::Copy +
Matcher<Z>, E: ::core::marker::Copy + Matcher<Z>,
F: ::core::marker::Copy + Matcher<Z>, G: ::core::marker::Copy +
Matcher<Z>, H: ::core::marker::Copy + Matcher<Z>,
I: ::core::marker::Copy + Matcher<Z>, J: ::core::marker::Copy +
Matcher<Z>, K: ::core::marker::Copy + Matcher<Z>,
L: ::core::marker::Copy + Matcher<Z>, M: ::core::marker::Copy +
Matcher<Z>, N: ::core::marker::Copy + Matcher<Z>,
O: ::core::marker::Copy + Matcher<Z>, P: ::core::marker::Copy +
Matcher<Z>> ::core::marker::Copy for
Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>,
I: Matcher<Z>, J: Matcher<Z>, K: Matcher<Z>, L: Matcher<Z>, M: Matcher<Z>,
N: Matcher<Z>, O: Matcher<Z>, P: Matcher<Z>> Matcher<Z> for
Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
type AllMatches<'a, Y: HaystackOf<'a, Z>> =
<Or8<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>, Or<Z, O, P>> as
Matcher<Z>>::AllMatches<'a, Y>;
type AllCaptures<'a, Y: HaystackOf<'a, Z>> =
<Or8<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>, Or<Z, O, P>> as
Matcher<Z>>::AllCaptures<'a, Y>;
fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
Or8::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>,
Or<Z, O, P>>::matches(hay)
}
fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y)
-> Self::AllMatches<'a, Y> {
Or8::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>,
Or<Z, O, P>>::all_matches(hay)
}
fn captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> bool {
Or8::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>,
Or<Z, O, P>>::captures(hay, caps)
}
fn all_captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> Self::AllCaptures<'a, Y> {
Or8::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>,
Or<Z, O, P>>::all_captures(hay, caps)
}
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>,
I: Matcher<Z>, J: Matcher<Z>, K: Matcher<Z>, L: Matcher<Z>, M: Matcher<Z>,
N: Matcher<Z>, O: Matcher<Z>, P: Matcher<Z>> Debug for
Or16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("{0:?}",
Or8::<Z, Or<Z, A, B>, Or<Z, C, D>, Or<Z, E, F>, Or<Z, G, H>,
Or<Z, I, J>, Or<Z, K, L>, Or<Z, M, N>,
Or<Z, O, P>>::default()))
}
}define_paired_n!(Or, AllMatchesOr, Or16, Or8, [A B] [C D] [E F] [G H] [I J] [K L] [M N] [O P]);
279
280pub struct Then4<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>>(pub PhantomData<Z>, pub PhantomData<A>, pub PhantomData<B>,
pub PhantomData<C>, pub PhantomData<D>);
#[automatically_derived]
impl<Z: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<Z>, B: ::core::default::Default + Matcher<Z>,
C: ::core::default::Default + Matcher<Z>, D: ::core::default::Default +
Matcher<Z>> ::core::default::Default for Then4<Z, A, B, C, D> {
#[inline]
fn default() -> Then4<Z, A, B, C, D> {
Then4(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}
#[automatically_derived]
impl<Z: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<Z>, B: ::core::clone::Clone + Matcher<Z>,
C: ::core::clone::Clone + Matcher<Z>, D: ::core::clone::Clone +
Matcher<Z>> ::core::clone::Clone for Then4<Z, A, B, C, D> {
#[inline]
fn clone(&self) -> Then4<Z, A, B, C, D> {
Then4(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2),
::core::clone::Clone::clone(&self.3),
::core::clone::Clone::clone(&self.4))
}
}
#[automatically_derived]
impl<Z: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<Z>, B: ::core::marker::Copy + Matcher<Z>,
C: ::core::marker::Copy + Matcher<Z>, D: ::core::marker::Copy +
Matcher<Z>> ::core::marker::Copy for Then4<Z, A, B, C, D> {
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>> Matcher<Z> for Then4<Z, A, B, C, D> {
type AllMatches<'a, Y: HaystackOf<'a, Z>> =
<Then<Z, Then<Z, A, B>, Then<Z, C, D>> as
Matcher<Z>>::AllMatches<'a, Y>;
type AllCaptures<'a, Y: HaystackOf<'a, Z>> =
<Then<Z, Then<Z, A, B>, Then<Z, C, D>> as
Matcher<Z>>::AllCaptures<'a, Y>;
fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
Then::<Z, Then<Z, A, B>, Then<Z, C, D>>::matches(hay)
}
fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y)
-> Self::AllMatches<'a, Y> {
Then::<Z, Then<Z, A, B>, Then<Z, C, D>>::all_matches(hay)
}
fn captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> bool {
Then::<Z, Then<Z, A, B>, Then<Z, C, D>>::captures(hay, caps)
}
fn all_captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> Self::AllCaptures<'a, Y> {
Then::<Z, Then<Z, A, B>, Then<Z, C, D>>::all_captures(hay, caps)
}
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>> Debug for Then4<Z, A, B, C, D> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("{0:?}",
Then::<Z, Then<Z, A, B>, Then<Z, C, D>>::default()))
}
}define_paired_n!(Then, AllMatchesThen, Then4, Then, [A B] [C D]);
281pub struct Then8<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>,
H: Matcher<Z>>(pub PhantomData<Z>, pub PhantomData<A>, pub PhantomData<B>,
pub PhantomData<C>, pub PhantomData<D>, pub PhantomData<E>,
pub PhantomData<F>, pub PhantomData<G>, pub PhantomData<H>);
#[automatically_derived]
impl<Z: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<Z>, B: ::core::default::Default + Matcher<Z>,
C: ::core::default::Default + Matcher<Z>, D: ::core::default::Default +
Matcher<Z>, E: ::core::default::Default + Matcher<Z>,
F: ::core::default::Default + Matcher<Z>, G: ::core::default::Default +
Matcher<Z>, H: ::core::default::Default + Matcher<Z>>
::core::default::Default for Then8<Z, A, B, C, D, E, F, G, H> {
#[inline]
fn default() -> Then8<Z, A, B, C, D, E, F, G, H> {
Then8(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}
#[automatically_derived]
impl<Z: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<Z>, B: ::core::clone::Clone + Matcher<Z>,
C: ::core::clone::Clone + Matcher<Z>, D: ::core::clone::Clone +
Matcher<Z>, E: ::core::clone::Clone + Matcher<Z>,
F: ::core::clone::Clone + Matcher<Z>, G: ::core::clone::Clone +
Matcher<Z>, H: ::core::clone::Clone + Matcher<Z>> ::core::clone::Clone for
Then8<Z, A, B, C, D, E, F, G, H> {
#[inline]
fn clone(&self) -> Then8<Z, A, B, C, D, E, F, G, H> {
Then8(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2),
::core::clone::Clone::clone(&self.3),
::core::clone::Clone::clone(&self.4),
::core::clone::Clone::clone(&self.5),
::core::clone::Clone::clone(&self.6),
::core::clone::Clone::clone(&self.7),
::core::clone::Clone::clone(&self.8))
}
}
#[automatically_derived]
impl<Z: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<Z>, B: ::core::marker::Copy + Matcher<Z>,
C: ::core::marker::Copy + Matcher<Z>, D: ::core::marker::Copy +
Matcher<Z>, E: ::core::marker::Copy + Matcher<Z>,
F: ::core::marker::Copy + Matcher<Z>, G: ::core::marker::Copy +
Matcher<Z>, H: ::core::marker::Copy + Matcher<Z>> ::core::marker::Copy for
Then8<Z, A, B, C, D, E, F, G, H> {
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>>
Matcher<Z> for Then8<Z, A, B, C, D, E, F, G, H> {
type AllMatches<'a, Y: HaystackOf<'a, Z>> =
<Then4<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>>
as Matcher<Z>>::AllMatches<'a, Y>;
type AllCaptures<'a, Y: HaystackOf<'a, Z>> =
<Then4<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>>
as Matcher<Z>>::AllCaptures<'a, Y>;
fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
Then4::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>,
Then<Z, G, H>>::matches(hay)
}
fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y)
-> Self::AllMatches<'a, Y> {
Then4::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>,
Then<Z, G, H>>::all_matches(hay)
}
fn captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> bool {
Then4::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>,
Then<Z, G, H>>::captures(hay, caps)
}
fn all_captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> Self::AllCaptures<'a, Y> {
Then4::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>,
Then<Z, G, H>>::all_captures(hay, caps)
}
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>>
Debug for Then8<Z, A, B, C, D, E, F, G, H> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("{0:?}",
Then4::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>,
Then<Z, G, H>>::default()))
}
}define_paired_n!(Then, AllMatchesThen, Then8, Then4, [A B] [C D] [E F] [G H]);
282pub struct Then16<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>,
C: Matcher<Z>, D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>,
H: Matcher<Z>, I: Matcher<Z>, J: Matcher<Z>, K: Matcher<Z>, L: Matcher<Z>,
M: Matcher<Z>, N: Matcher<Z>, O: Matcher<Z>,
P: Matcher<Z>>(pub PhantomData<Z>, pub PhantomData<A>, pub PhantomData<B>,
pub PhantomData<C>, pub PhantomData<D>, pub PhantomData<E>,
pub PhantomData<F>, pub PhantomData<G>, pub PhantomData<H>,
pub PhantomData<I>, pub PhantomData<J>, pub PhantomData<K>,
pub PhantomData<L>, pub PhantomData<M>, pub PhantomData<N>,
pub PhantomData<O>, pub PhantomData<P>);
#[automatically_derived]
impl<Z: ::core::default::Default + HaystackItem, A: ::core::default::Default +
Matcher<Z>, B: ::core::default::Default + Matcher<Z>,
C: ::core::default::Default + Matcher<Z>, D: ::core::default::Default +
Matcher<Z>, E: ::core::default::Default + Matcher<Z>,
F: ::core::default::Default + Matcher<Z>, G: ::core::default::Default +
Matcher<Z>, H: ::core::default::Default + Matcher<Z>,
I: ::core::default::Default + Matcher<Z>, J: ::core::default::Default +
Matcher<Z>, K: ::core::default::Default + Matcher<Z>,
L: ::core::default::Default + Matcher<Z>, M: ::core::default::Default +
Matcher<Z>, N: ::core::default::Default + Matcher<Z>,
O: ::core::default::Default + Matcher<Z>, P: ::core::default::Default +
Matcher<Z>> ::core::default::Default for
Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
#[inline]
fn default()
-> Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
Then16(::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default(),
::core::default::Default::default())
}
}
#[automatically_derived]
impl<Z: ::core::clone::Clone + HaystackItem, A: ::core::clone::Clone +
Matcher<Z>, B: ::core::clone::Clone + Matcher<Z>,
C: ::core::clone::Clone + Matcher<Z>, D: ::core::clone::Clone +
Matcher<Z>, E: ::core::clone::Clone + Matcher<Z>,
F: ::core::clone::Clone + Matcher<Z>, G: ::core::clone::Clone +
Matcher<Z>, H: ::core::clone::Clone + Matcher<Z>,
I: ::core::clone::Clone + Matcher<Z>, J: ::core::clone::Clone +
Matcher<Z>, K: ::core::clone::Clone + Matcher<Z>,
L: ::core::clone::Clone + Matcher<Z>, M: ::core::clone::Clone +
Matcher<Z>, N: ::core::clone::Clone + Matcher<Z>,
O: ::core::clone::Clone + Matcher<Z>, P: ::core::clone::Clone +
Matcher<Z>> ::core::clone::Clone for
Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
#[inline]
fn clone(&self)
-> Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
Then16(::core::clone::Clone::clone(&self.0),
::core::clone::Clone::clone(&self.1),
::core::clone::Clone::clone(&self.2),
::core::clone::Clone::clone(&self.3),
::core::clone::Clone::clone(&self.4),
::core::clone::Clone::clone(&self.5),
::core::clone::Clone::clone(&self.6),
::core::clone::Clone::clone(&self.7),
::core::clone::Clone::clone(&self.8),
::core::clone::Clone::clone(&self.9),
::core::clone::Clone::clone(&self.10),
::core::clone::Clone::clone(&self.11),
::core::clone::Clone::clone(&self.12),
::core::clone::Clone::clone(&self.13),
::core::clone::Clone::clone(&self.14),
::core::clone::Clone::clone(&self.15),
::core::clone::Clone::clone(&self.16))
}
}
#[automatically_derived]
impl<Z: ::core::marker::Copy + HaystackItem, A: ::core::marker::Copy +
Matcher<Z>, B: ::core::marker::Copy + Matcher<Z>,
C: ::core::marker::Copy + Matcher<Z>, D: ::core::marker::Copy +
Matcher<Z>, E: ::core::marker::Copy + Matcher<Z>,
F: ::core::marker::Copy + Matcher<Z>, G: ::core::marker::Copy +
Matcher<Z>, H: ::core::marker::Copy + Matcher<Z>,
I: ::core::marker::Copy + Matcher<Z>, J: ::core::marker::Copy +
Matcher<Z>, K: ::core::marker::Copy + Matcher<Z>,
L: ::core::marker::Copy + Matcher<Z>, M: ::core::marker::Copy +
Matcher<Z>, N: ::core::marker::Copy + Matcher<Z>,
O: ::core::marker::Copy + Matcher<Z>, P: ::core::marker::Copy +
Matcher<Z>> ::core::marker::Copy for
Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>,
I: Matcher<Z>, J: Matcher<Z>, K: Matcher<Z>, L: Matcher<Z>, M: Matcher<Z>,
N: Matcher<Z>, O: Matcher<Z>, P: Matcher<Z>> Matcher<Z> for
Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
type AllMatches<'a, Y: HaystackOf<'a, Z>> =
<Then8<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>,
Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>, Then<Z, O, P>> as
Matcher<Z>>::AllMatches<'a, Y>;
type AllCaptures<'a, Y: HaystackOf<'a, Z>> =
<Then8<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>,
Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>, Then<Z, O, P>> as
Matcher<Z>>::AllCaptures<'a, Y>;
fn matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y) -> bool {
Then8::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>,
Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>,
Then<Z, O, P>>::matches(hay)
}
fn all_matches<'a, Y: HaystackOf<'a, Z>>(hay: &mut Y)
-> Self::AllMatches<'a, Y> {
Then8::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>,
Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>,
Then<Z, O, P>>::all_matches(hay)
}
fn captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> bool {
Then8::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>,
Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>,
Then<Z, O, P>>::captures(hay, caps)
}
fn all_captures<'a,
Y: HaystackOf<'a, Z>>(hay: &mut Y, caps: &mut IndexedCaptures)
-> Self::AllCaptures<'a, Y> {
Then8::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>, Then<Z, G, H>,
Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>,
Then<Z, O, P>>::all_captures(hay, caps)
}
}
impl<Z: HaystackItem, A: Matcher<Z>, B: Matcher<Z>, C: Matcher<Z>,
D: Matcher<Z>, E: Matcher<Z>, F: Matcher<Z>, G: Matcher<Z>, H: Matcher<Z>,
I: Matcher<Z>, J: Matcher<Z>, K: Matcher<Z>, L: Matcher<Z>, M: Matcher<Z>,
N: Matcher<Z>, O: Matcher<Z>, P: Matcher<Z>> Debug for
Then16<Z, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
f.write_fmt(format_args!("{0:?}",
Then8::<Z, Then<Z, A, B>, Then<Z, C, D>, Then<Z, E, F>,
Then<Z, G, H>, Then<Z, I, J>, Then<Z, K, L>, Then<Z, M, N>,
Then<Z, O, P>>::default()))
}
}define_paired_n!(Then, AllMatchesThen, Then16, Then8, [A B] [C D] [E F] [G H] [I J] [K L] [M N] [O P]);