@@ -16,6 +16,8 @@ use vec;
16
16
17
17
#[ cfg( not( test) ) ] use cmp:: { Eq , Ord } ;
18
18
19
+ pub use self :: getters:: * ;
20
+
19
21
pub trait CopyableTuple < T , U > {
20
22
fn first ( & self ) -> T ;
21
23
fn second ( & self ) -> U ;
@@ -246,152 +248,145 @@ impl<A:Ord,B:Ord,C:Ord> Ord for (A, B, C) {
246
248
fn gt ( & self , other : & ( A , B , C ) ) -> bool { ( * other) . lt ( & ( * self ) ) }
247
249
}
248
250
249
- // Tuple element accessor traits
251
+ // Tuple element getters
250
252
251
- macro_rules! n_tuple (
252
- ( $name : ident : $ ( $method : ident : $T : ident ) ,+ ) => (
253
- pub trait $name<$ ( $T ) ,+> {
254
- $( fn $method( & self ) -> $T; ) +
253
+ macro_rules! tuple_getters (
254
+ ( $(
255
+ $name: ident {
256
+ $( fn $method: ident -> $T: ident { $accessor : pat => $t : expr } ) +
255
257
}
256
- )
257
- )
258
-
259
- n_tuple ! ( Tuple2 : n0: A , n1: B )
260
- n_tuple ! ( Tuple3 : n0: A , n1: B , n2: C )
261
- n_tuple ! ( Tuple4 : n0: A , n1: B , n2: C , n3: D )
262
- n_tuple ! ( Tuple5 : n0: A , n1: B , n2: C , n3: D , n4: E )
263
- n_tuple ! ( Tuple6 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F )
264
- n_tuple ! ( Tuple7 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F , n6: G )
265
- n_tuple ! ( Tuple8 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F , n6: G , n7: H )
266
- n_tuple ! ( Tuple9 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F , n6: G , n7: H , n8: I )
267
- n_tuple ! ( Tuple10 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F , n6: G , n7: H , n8: I , n9: J )
268
- n_tuple ! ( Tuple11 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F , n6: G , n7: H , n8: I , n9: J , n10: K )
269
- n_tuple ! ( Tuple12 : n0: A , n1: B , n2: C , n3: D , n4: E , n5: F , n6: G , n7: H , n8: I , n9: J , n10: K , n11: L )
270
-
271
- // Tuple element accessor trait implementations
272
-
273
- macro_rules! impl_n_tuple(
274
- ( $name: ident: $( $method: ident -> $T: ident { $accessor: pat => $t: expr } ) +) => (
275
- impl <$( $T: Copy ) ,+> $name<$( $T) ,+> for ( $( $T) ,+) {
276
- $(
277
- fn $method( & self ) -> $T {
278
- match * self {
279
- $accessor => $t
258
+ ) +) => (
259
+ pub mod getters {
260
+ use kinds:: Copy ;
261
+
262
+ $( pub trait $name<$( $T) ,+> {
263
+ $( fn $method( & self ) -> $T; ) +
264
+ } ) +
265
+
266
+ $( impl <$( $T: Copy ) ,+> $name<$( $T) ,+> for ( $( $T) ,+) {
267
+ $(
268
+ #[ inline( always) ]
269
+ fn $method( & self ) -> $T {
270
+ match * self {
271
+ $accessor => $t
272
+ }
280
273
}
281
- }
282
- ) +
274
+ ) +
275
+ } ) +
283
276
}
284
277
)
285
278
)
286
279
287
- impl_n_tuple ! ( Tuple2 :
288
- n0 -> A { ( a, _) => a }
289
- n1 -> B { ( _, b) => b }
290
- )
280
+ tuple_getters ! (
281
+ Tuple2 {
282
+ fn n0 -> A { ( a, _) => a }
283
+ fn n1 -> B { ( _, b) => b }
284
+ }
291
285
292
- impl_n_tuple ! ( Tuple3 :
293
- n0 -> A { ( a, _, _) => a }
294
- n1 -> B { ( _, b, _) => b }
295
- n2 -> C { ( _, _, c) => c }
296
- )
286
+ Tuple3 {
287
+ fn n0 -> A { ( a, _, _) => a }
288
+ fn n1 -> B { ( _, b, _) => b }
289
+ fn n2 -> C { ( _, _, c) => c }
290
+ }
297
291
298
- impl_n_tuple ! ( Tuple4 :
299
- n0 -> A { ( a, _, _, _) => a }
300
- n1 -> B { ( _, b, _, _) => b }
301
- n2 -> C { ( _, _, c, _) => c }
302
- n3 -> D { ( _, _, _, d) => d }
303
- )
292
+ Tuple4 {
293
+ fn n0 -> A { ( a, _, _, _) => a }
294
+ fn n1 -> B { ( _, b, _, _) => b }
295
+ fn n2 -> C { ( _, _, c, _) => c }
296
+ fn n3 -> D { ( _, _, _, d) => d }
297
+ }
304
298
305
- impl_n_tuple ! ( Tuple5 :
306
- n0 -> A { ( a, _, _, _, _) => a }
307
- n1 -> B { ( _, b, _, _, _) => b }
308
- n2 -> C { ( _, _, c, _, _) => c }
309
- n3 -> D { ( _, _, _, d, _) => d }
310
- n4 -> E { ( _, _, _, _, e) => e }
311
- )
299
+ Tuple5 {
300
+ fn n0 -> A { ( a, _, _, _, _) => a }
301
+ fn n1 -> B { ( _, b, _, _, _) => b }
302
+ fn n2 -> C { ( _, _, c, _, _) => c }
303
+ fn n3 -> D { ( _, _, _, d, _) => d }
304
+ fn n4 -> E { ( _, _, _, _, e) => e }
305
+ }
312
306
313
- impl_n_tuple ! ( Tuple6 :
314
- n0 -> A { ( a, _, _, _, _, _) => a }
315
- n1 -> B { ( _, b, _, _, _, _) => b }
316
- n2 -> C { ( _, _, c, _, _, _) => c }
317
- n3 -> D { ( _, _, _, d, _, _) => d }
318
- n4 -> E { ( _, _, _, _, e, _) => e }
319
- n5 -> F { ( _, _, _, _, _, f) => f }
320
- )
307
+ Tuple6 {
308
+ fn n0 -> A { ( a, _, _, _, _, _) => a }
309
+ fn n1 -> B { ( _, b, _, _, _, _) => b }
310
+ fn n2 -> C { ( _, _, c, _, _, _) => c }
311
+ fn n3 -> D { ( _, _, _, d, _, _) => d }
312
+ fn n4 -> E { ( _, _, _, _, e, _) => e }
313
+ fn n5 -> F { ( _, _, _, _, _, f) => f }
314
+ }
321
315
322
- impl_n_tuple ! ( Tuple7 :
323
- n0 -> A { ( a, _, _, _, _, _, _) => a }
324
- n1 -> B { ( _, b, _, _, _, _, _) => b }
325
- n2 -> C { ( _, _, c, _, _, _, _) => c }
326
- n3 -> D { ( _, _, _, d, _, _, _) => d }
327
- n4 -> E { ( _, _, _, _, e, _, _) => e }
328
- n5 -> F { ( _, _, _, _, _, f, _) => f }
329
- n6 -> G { ( _, _, _, _, _, _, g) => g }
330
- )
316
+ Tuple7 {
317
+ fn n0 -> A { ( a, _, _, _, _, _, _) => a }
318
+ fn n1 -> B { ( _, b, _, _, _, _, _) => b }
319
+ fn n2 -> C { ( _, _, c, _, _, _, _) => c }
320
+ fn n3 -> D { ( _, _, _, d, _, _, _) => d }
321
+ fn n4 -> E { ( _, _, _, _, e, _, _) => e }
322
+ fn n5 -> F { ( _, _, _, _, _, f, _) => f }
323
+ fn n6 -> G { ( _, _, _, _, _, _, g) => g }
324
+ }
331
325
332
- impl_n_tuple ! ( Tuple8 :
333
- n0 -> A { ( a, _, _, _, _, _, _, _) => a }
334
- n1 -> B { ( _, b, _, _, _, _, _, _) => b }
335
- n2 -> C { ( _, _, c, _, _, _, _, _) => c }
336
- n3 -> D { ( _, _, _, d, _, _, _, _) => d }
337
- n4 -> E { ( _, _, _, _, e, _, _, _) => e }
338
- n5 -> F { ( _, _, _, _, _, f, _, _) => f }
339
- n6 -> G { ( _, _, _, _, _, _, g, _) => g }
340
- n7 -> H { ( _, _, _, _, _, _, _, h) => h }
341
- )
326
+ Tuple8 {
327
+ fn n0 -> A { ( a, _, _, _, _, _, _, _) => a }
328
+ fn n1 -> B { ( _, b, _, _, _, _, _, _) => b }
329
+ fn n2 -> C { ( _, _, c, _, _, _, _, _) => c }
330
+ fn n3 -> D { ( _, _, _, d, _, _, _, _) => d }
331
+ fn n4 -> E { ( _, _, _, _, e, _, _, _) => e }
332
+ fn n5 -> F { ( _, _, _, _, _, f, _, _) => f }
333
+ fn n6 -> G { ( _, _, _, _, _, _, g, _) => g }
334
+ fn n7 -> H { ( _, _, _, _, _, _, _, h) => h }
335
+ }
342
336
343
- impl_n_tuple ! ( Tuple9 :
344
- n0 -> A { ( a, _, _, _, _, _, _, _, _) => a }
345
- n1 -> B { ( _, b, _, _, _, _, _, _, _) => b }
346
- n2 -> C { ( _, _, c, _, _, _, _, _, _) => c }
347
- n3 -> D { ( _, _, _, d, _, _, _, _, _) => d }
348
- n4 -> E { ( _, _, _, _, e, _, _, _, _) => e }
349
- n5 -> F { ( _, _, _, _, _, f, _, _, _) => f }
350
- n6 -> G { ( _, _, _, _, _, _, g, _, _) => g }
351
- n7 -> H { ( _, _, _, _, _, _, _, h, _) => h }
352
- n8 -> I { ( _, _, _, _, _, _, _, _, i) => i }
353
- )
337
+ Tuple9 {
338
+ fn n0 -> A { ( a, _, _, _, _, _, _, _, _) => a }
339
+ fn n1 -> B { ( _, b, _, _, _, _, _, _, _) => b }
340
+ fn n2 -> C { ( _, _, c, _, _, _, _, _, _) => c }
341
+ fn n3 -> D { ( _, _, _, d, _, _, _, _, _) => d }
342
+ fn n4 -> E { ( _, _, _, _, e, _, _, _, _) => e }
343
+ fn n5 -> F { ( _, _, _, _, _, f, _, _, _) => f }
344
+ fn n6 -> G { ( _, _, _, _, _, _, g, _, _) => g }
345
+ fn n7 -> H { ( _, _, _, _, _, _, _, h, _) => h }
346
+ fn n8 -> I { ( _, _, _, _, _, _, _, _, i) => i }
347
+ }
354
348
355
- impl_n_tuple ! ( Tuple10 :
356
- n0 -> A { ( a, _, _, _, _, _, _, _, _, _) => a }
357
- n1 -> B { ( _, b, _, _, _, _, _, _, _, _) => b }
358
- n2 -> C { ( _, _, c, _, _, _, _, _, _, _) => c }
359
- n3 -> D { ( _, _, _, d, _, _, _, _, _, _) => d }
360
- n4 -> E { ( _, _, _, _, e, _, _, _, _, _) => e }
361
- n5 -> F { ( _, _, _, _, _, f, _, _, _, _) => f }
362
- n6 -> G { ( _, _, _, _, _, _, g, _, _, _) => g }
363
- n7 -> H { ( _, _, _, _, _, _, _, h, _, _) => h }
364
- n8 -> I { ( _, _, _, _, _, _, _, _, i, _) => i }
365
- n9 -> J { ( _, _, _, _, _, _, _, _, _, j) => j }
366
- )
349
+ Tuple10 {
350
+ fn n0 -> A { ( a, _, _, _, _, _, _, _, _, _) => a }
351
+ fn n1 -> B { ( _, b, _, _, _, _, _, _, _, _) => b }
352
+ fn n2 -> C { ( _, _, c, _, _, _, _, _, _, _) => c }
353
+ fn n3 -> D { ( _, _, _, d, _, _, _, _, _, _) => d }
354
+ fn n4 -> E { ( _, _, _, _, e, _, _, _, _, _) => e }
355
+ fn n5 -> F { ( _, _, _, _, _, f, _, _, _, _) => f }
356
+ fn n6 -> G { ( _, _, _, _, _, _, g, _, _, _) => g }
357
+ fn n7 -> H { ( _, _, _, _, _, _, _, h, _, _) => h }
358
+ fn n8 -> I { ( _, _, _, _, _, _, _, _, i, _) => i }
359
+ fn n9 -> J { ( _, _, _, _, _, _, _, _, _, j) => j }
360
+ }
367
361
368
- impl_n_tuple ! ( Tuple11 :
369
- n0 -> A { ( a, _, _, _, _, _, _, _, _, _, _) => a }
370
- n1 -> B { ( _, b, _, _, _, _, _, _, _, _, _) => b }
371
- n2 -> C { ( _, _, c, _, _, _, _, _, _, _, _) => c }
372
- n3 -> D { ( _, _, _, d, _, _, _, _, _, _, _) => d }
373
- n4 -> E { ( _, _, _, _, e, _, _, _, _, _, _) => e }
374
- n5 -> F { ( _, _, _, _, _, f, _, _, _, _, _) => f }
375
- n6 -> G { ( _, _, _, _, _, _, g, _, _, _, _) => g }
376
- n7 -> H { ( _, _, _, _, _, _, _, h, _, _, _) => h }
377
- n8 -> I { ( _, _, _, _, _, _, _, _, i, _, _) => i }
378
- n9 -> J { ( _, _, _, _, _, _, _, _, _, j, _) => j }
379
- n10 -> K { ( _, _, _, _, _, _, _, _, _, _, k) => k }
380
- )
362
+ Tuple11 {
363
+ fn n0 -> A { ( a, _, _, _, _, _, _, _, _, _, _) => a }
364
+ fn n1 -> B { ( _, b, _, _, _, _, _, _, _, _, _) => b }
365
+ fn n2 -> C { ( _, _, c, _, _, _, _, _, _, _, _) => c }
366
+ fn n3 -> D { ( _, _, _, d, _, _, _, _, _, _, _) => d }
367
+ fn n4 -> E { ( _, _, _, _, e, _, _, _, _, _, _) => e }
368
+ fn n5 -> F { ( _, _, _, _, _, f, _, _, _, _, _) => f }
369
+ fn n6 -> G { ( _, _, _, _, _, _, g, _, _, _, _) => g }
370
+ fn n7 -> H { ( _, _, _, _, _, _, _, h, _, _, _) => h }
371
+ fn n8 -> I { ( _, _, _, _, _, _, _, _, i, _, _) => i }
372
+ fn n9 -> J { ( _, _, _, _, _, _, _, _, _, j, _) => j }
373
+ fn n10 -> K { ( _, _, _, _, _, _, _, _, _, _, k) => k }
374
+ }
381
375
382
- impl_n_tuple ! ( Tuple12 :
383
- n0 -> A { ( a, _, _, _, _, _, _, _, _, _, _, _) => a }
384
- n1 -> B { ( _, b, _, _, _, _, _, _, _, _, _, _) => b }
385
- n2 -> C { ( _, _, c, _, _, _, _, _, _, _, _, _) => c }
386
- n3 -> D { ( _, _, _, d, _, _, _, _, _, _, _, _) => d }
387
- n4 -> E { ( _, _, _, _, e, _, _, _, _, _, _, _) => e }
388
- n5 -> F { ( _, _, _, _, _, f, _, _, _, _, _, _) => f }
389
- n6 -> G { ( _, _, _, _, _, _, g, _, _, _, _, _) => g }
390
- n7 -> H { ( _, _, _, _, _, _, _, h, _, _, _, _) => h }
391
- n8 -> I { ( _, _, _, _, _, _, _, _, i, _, _, _) => i }
392
- n9 -> J { ( _, _, _, _, _, _, _, _, _, j, _, _) => j }
393
- n10 -> K { ( _, _, _, _, _, _, _, _, _, _, k, _) => k }
394
- n11 -> L { ( _, _, _, _, _, _, _, _, _, _, _, l) => l }
376
+ Tuple12 {
377
+ fn n0 -> A { ( a, _, _, _, _, _, _, _, _, _, _, _) => a }
378
+ fn n1 -> B { ( _, b, _, _, _, _, _, _, _, _, _, _) => b }
379
+ fn n2 -> C { ( _, _, c, _, _, _, _, _, _, _, _, _) => c }
380
+ fn n3 -> D { ( _, _, _, d, _, _, _, _, _, _, _, _) => d }
381
+ fn n4 -> E { ( _, _, _, _, e, _, _, _, _, _, _, _) => e }
382
+ fn n5 -> F { ( _, _, _, _, _, f, _, _, _, _, _, _) => f }
383
+ fn n6 -> G { ( _, _, _, _, _, _, g, _, _, _, _, _) => g }
384
+ fn n7 -> H { ( _, _, _, _, _, _, _, h, _, _, _, _) => h }
385
+ fn n8 -> I { ( _, _, _, _, _, _, _, _, i, _, _, _) => i }
386
+ fn n9 -> J { ( _, _, _, _, _, _, _, _, _, j, _, _) => j }
387
+ fn n10 -> K { ( _, _, _, _, _, _, _, _, _, _, k, _) => k }
388
+ fn n11 -> L { ( _, _, _, _, _, _, _, _, _, _, _, l) => l }
389
+ }
395
390
)
396
391
397
392
#[ test]
0 commit comments