@@ -22,3 +22,53 @@ pub type IndexMap<K, V> = indexmap::IndexMap<K, V, Hasher>;
2222pub fn new_indexmap < K , V > ( ) -> IndexMap < K , V > {
2323 IndexMap :: with_hasher ( Hasher :: default ( ) )
2424}
25+
26+ pub mod deep_clone {
27+ pub trait DeepClone {
28+ type Output ;
29+
30+ fn deep_clone ( & self ) -> Self :: Output ;
31+ }
32+
33+ impl < T : Clone > DeepClone for & T {
34+ type Output = T ;
35+
36+ fn deep_clone ( & self ) -> Self :: Output {
37+ ( * self ) . clone ( )
38+ }
39+ }
40+
41+ #[ rustfmt:: skip]
42+ mod impls {
43+ use super :: DeepClone ;
44+
45+ macro_rules! impl_deep_clone_for_tuples {
46+ ( $( ( $T: ident, $idx: tt) ) ,+) => {
47+ impl <$( $T: DeepClone ) ,+> DeepClone for ( $( $T) ,+, ) {
48+ type Output = ( $( <$T as DeepClone >:: Output ) ,+, ) ;
49+
50+ fn deep_clone( & self ) -> Self :: Output {
51+ ( $( ( & self ) . $idx. deep_clone( ) ) ,+, )
52+ }
53+ }
54+ } ;
55+ }
56+
57+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) ) ;
58+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) ) ;
59+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) ) ;
60+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) ) ;
61+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) ) ;
62+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) ) ;
63+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) ) ;
64+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) ) ;
65+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) ) ;
66+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) ) ;
67+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) , ( T11 , 10 ) ) ;
68+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) , ( T11 , 10 ) , ( T12 , 11 ) ) ;
69+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) , ( T11 , 10 ) , ( T12 , 11 ) , ( T13 , 12 ) ) ;
70+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) , ( T11 , 10 ) , ( T12 , 11 ) , ( T13 , 12 ) , ( T14 , 13 ) ) ;
71+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) , ( T11 , 10 ) , ( T12 , 11 ) , ( T13 , 12 ) , ( T14 , 13 ) , ( T15 , 14 ) ) ;
72+ impl_deep_clone_for_tuples ! ( ( T1 , 0 ) , ( T2 , 1 ) , ( T3 , 2 ) , ( T4 , 3 ) , ( T5 , 4 ) , ( T6 , 5 ) , ( T7 , 6 ) , ( T8 , 7 ) , ( T9 , 8 ) , ( T10 , 9 ) , ( T11 , 10 ) , ( T12 , 11 ) , ( T13 , 12 ) , ( T14 , 13 ) , ( T15 , 14 ) , ( T16 , 15 ) ) ;
73+ }
74+ }
0 commit comments