annotate Source/Common/Compatibility4.cs @ 6:11b6da379593

Исправлена странная ошибка при использовании OfType<...>().Where(...)
author cin
date Mon, 05 Dec 2016 05:50:52 +0300
parents f990fcb411a9
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
1 namespace System
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
2 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using Collections;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using Text;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7 public delegate void Action<T1,T2,T3,T4,T5> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 public delegate void Action<T1,T2,T3,T4,T5,T6> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 public delegate void Action<T1,T2,T3,T4,T5,T6,T7> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public delegate void Action<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 public delegate TResult Func<T1,T2,T3,T4,T5,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public delegate TResult Func<T1,T2,T3,T4,T5,T6,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,TResult> (T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 public delegate TResult Func<T1,T2,T3,T4,T5,T6,T7,T8,T9,T10,T11,T12,T13,T14,T15,T16,TResult>(T1 arg1, T2 arg2, T3 arg3, T4 arg4, T5 arg5, T6 arg6, T7 arg7, T8 arg8, T9 arg9, T10 arg10, T11 arg11, T12 arg12, T13 arg13, T14 arg14, T15 arg15, T16 arg16);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 #region Tuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 interface ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 int GetHashCode(IEqualityComparer comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 string ToString (StringBuilder sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 int Size { get; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 public static class Tuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 internal static int CombineHashCodes(int h1, int h2) { return (((h1 << 5) + h1) ^ h2); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 internal static int CombineHashCodes(int h1, int h2, int h3) { return CombineHashCodes(CombineHashCodes(h1, h2), h3); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 internal static int CombineHashCodes(int h1, int h2, int h3, int h4) { return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) { return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) { return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) { return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) { return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8)); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public static Tuple<T1> Create<T1> (T1 item1) { return new Tuple<T1> (item1); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public static Tuple<T1,T2> Create<T1,T2> (T1 item1, T2 item2) { return new Tuple<T1,T2> (item1, item2); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 public static Tuple<T1,T2,T3> Create<T1,T2,T3>(T1 item1, T2 item2, T3 item3) { return new Tuple<T1,T2,T3>(item1, item2, item3); }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 public static Tuple<T1,T2,T3,T4> Create<T1,T2,T3,T4>(T1 item1, T2 item2, T3 item3, T4 item4)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 return new Tuple<T1,T2,T3,T4>(item1, item2, item3, item4);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 public static Tuple<T1,T2,T3,T4,T5> Create<T1,T2,T3,T4,T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 return new Tuple<T1,T2,T3,T4,T5>(item1, item2, item3, item4, item5);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 public static Tuple<T1,T2,T3,T4,T5,T6> Create<T1,T2,T3,T4,T5,T6>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 return new Tuple<T1,T2,T3,T4,T5,T6>(item1, item2, item3, item4, item5, item6);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 public static Tuple<T1,T2,T3,T4,T5,T6,T7> Create<T1,T2,T3,T4,T5,T6,T7>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 return new Tuple<T1,T2,T3,T4,T5,T6,T7>(item1, item2, item3, item4, item5, item6, item7);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 public static Tuple<T1,T2,T3,T4,T5,T6,T7,Tuple<T8>> Create<T1,T2,T3,T4,T5,T6,T7,T8>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 return new Tuple<T1,T2,T3,T4,T5,T6,T7,Tuple<T8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 public Tuple(T1 item1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 var tuple = other as Tuple<T1>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 return comparer.Compare(_item1, tuple._item1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 var tuple = other as Tuple<T1>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 return comparer.Equals(_item1, tuple._item1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 return comparer.GetHashCode(_item1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 sb.Append(_item1).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 int ITuple.Size { get { return 2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 public class Tuple<T1,T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 public Tuple(T1 item1, T2 item2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 var tuple = other as Tuple<T1,T2>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 var num = comparer.Compare(_item1, tuple._item1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 if (num == 0)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 return comparer.Compare(_item2, tuple._item2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 var tuple = other as Tuple<T1,T2>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 comparer.Equals(_item2, tuple._item2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 return Tuple.CombineHashCodes(comparer.GetHashCode(_item1), comparer.GetHashCode(_item2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 .Append(_item2).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
240 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
241 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
242 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
243 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
244 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
245
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
246 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
247 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
248
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
249 int ITuple.Size { get { return 2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
250 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
251
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
252 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
253 public class Tuple<T1,T2,T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
254 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
255 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
256 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
257 readonly T3 _item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
258
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
259 public Tuple(T1 item1, T2 item2, T3 item3)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
260 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
261 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
262 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
263 _item3 = item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
264 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
265
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
266 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
267 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
268 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
269 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
270
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
271 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
272 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
273 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
274 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
275
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
276 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
277 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
278 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
279 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
280
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
281 var tuple = other as Tuple<T1,T2,T3>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
282
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
283 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
284 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
285
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
286 int num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
287
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
288 num = comparer.Compare(_item1, tuple._item1); if (num == 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
289 num = comparer.Compare(_item2, tuple._item2); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
290
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
291 return comparer.Compare(_item3, tuple._item3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
292 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
293
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
294 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
295 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
296 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
297 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
298
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
299 var tuple = other as Tuple<T1,T2,T3>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
300
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
301 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
302 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
303
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
304 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
305 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
306 comparer.Equals(_item2, tuple._item2) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
307 comparer.Equals(_item3, tuple._item3);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
308 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
309
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
310 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
311 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
312 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
313 Tuple.CombineHashCodes(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
314 comparer.GetHashCode(_item1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
315 comparer.GetHashCode(_item2),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
316 comparer.GetHashCode(_item3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
317 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
318
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
319 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
320 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
321 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
322 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
323
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
324 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
325 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
326 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
327 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
328
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
329 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
330 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
331 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
332 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
333 .Append(_item2).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
334 .Append(_item3).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
335
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
336 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
337 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
338
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
339 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
340 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
341 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
342 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
343 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
344 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
345
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
346 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
347 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
348 public T3 Item3 { get { return _item3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
349
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
350 int ITuple.Size { get { return 3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
351 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
352
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
353 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
354 public class Tuple<T1,T2,T3,T4> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
355 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
356 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
357 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
358 readonly T3 _item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
359 readonly T4 _item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
360
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
361 public Tuple(T1 item1, T2 item2, T3 item3, T4 item4)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
362 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
363 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
364 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
365 _item3 = item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
366 _item4 = item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
367 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
368
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
369 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
370 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
371 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
372 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
373
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
374 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
375 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
376 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
377 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
378
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
379 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
380 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
381 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
382 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
383
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
384 var tuple = other as Tuple<T1,T2,T3,T4>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
385
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
386 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
387 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
388
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
389 int num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
390
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
391 num = comparer.Compare(_item1, tuple._item1); if (num == 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
392 num = comparer.Compare(_item2, tuple._item2); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
393 num = comparer.Compare(_item3, tuple._item3); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
394
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
395 return comparer.Compare(_item4, tuple._item4);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
396 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
397
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
398 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
399 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
400 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
401 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
402
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
403 var tuple = other as Tuple<T1,T2,T3,T4>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
404
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
405 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
406 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
407
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
408 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
409 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
410 comparer.Equals(_item2, tuple._item2) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
411 comparer.Equals(_item3, tuple._item3) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
412 comparer.Equals(_item4, tuple._item4);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
413 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
414
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
415 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
416 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
417 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
418 Tuple.CombineHashCodes(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
419 comparer.GetHashCode(_item1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
420 comparer.GetHashCode(_item2),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
421 comparer.GetHashCode(_item3),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
422 comparer.GetHashCode(_item4));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
423 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
424
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
425 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
426 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
427 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
428 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
429
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
430 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
431 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
432 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
433 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
434
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
435 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
436 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
437 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
438 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
439 .Append(_item2).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
440 .Append(_item3).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
441 .Append(_item4).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
442
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
443 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
444 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
445
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
446 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
447 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
448 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
449 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
450 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
451 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
452
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
453 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
454 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
455 public T3 Item3 { get { return _item3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
456 public T4 Item4 { get { return _item4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
457
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
458 int ITuple.Size { get { return 4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
459 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
460
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
461 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
462 public class Tuple<T1,T2,T3,T4,T5> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
463 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
464 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
465 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
466 readonly T3 _item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
467 readonly T4 _item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
468 readonly T5 _item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
469
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
470 public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
471 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
472 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
473 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
474 _item3 = item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
475 _item4 = item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
476 _item5 = item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
477 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
478
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
479 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
480 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
481 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
482 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
483
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
484 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
485 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
486 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
487 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
488
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
489 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
490 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
491 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
492 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
493
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
494 var tuple = other as Tuple<T1,T2,T3,T4,T5>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
495
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
496 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
497 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
498
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
499 int num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
500
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
501 num = comparer.Compare(_item1, tuple._item1); if (num == 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
502 num = comparer.Compare(_item2, tuple._item2); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
503 num = comparer.Compare(_item3, tuple._item3); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
504 num = comparer.Compare(_item4, tuple._item4); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
505
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
506 return comparer.Compare(_item5, tuple._item5);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
507 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
508
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
509 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
510 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
511 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
512 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
513
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
514 var tuple = other as Tuple<T1,T2,T3,T4,T5>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
515
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
516 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
517 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
518
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
519 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
520 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
521 comparer.Equals(_item2, tuple._item2) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
522 comparer.Equals(_item3, tuple._item3) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
523 comparer.Equals(_item4, tuple._item4) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
524 comparer.Equals(_item5, tuple._item5);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
525 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
526
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
527 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
528 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
529 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
530 Tuple.CombineHashCodes(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
531 comparer.GetHashCode(_item1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
532 comparer.GetHashCode(_item2),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
533 comparer.GetHashCode(_item3),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
534 comparer.GetHashCode(_item4),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
535 comparer.GetHashCode(_item5));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
536 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
537
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
538 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
539 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
540 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
541 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
542
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
543 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
544 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
545 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
546 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
547
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
548 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
549 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
550 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
551 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
552 .Append(_item2).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
553 .Append(_item3).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
554 .Append(_item4).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
555 .Append(_item5).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
556
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
557 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
558 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
559
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
560 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
561 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
562 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
563 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
564 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
565 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
566
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
567 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
568 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
569 public T3 Item3 { get { return _item3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
570 public T4 Item4 { get { return _item4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
571 public T5 Item5 { get { return _item5; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
572
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
573 int ITuple.Size { get { return 5; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
574 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
575
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
576 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
577 public class Tuple<T1,T2,T3,T4,T5,T6> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
578 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
579 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
580 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
581 readonly T3 _item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
582 readonly T4 _item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
583 readonly T5 _item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
584 readonly T6 _item6;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
585
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
586 public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
587 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
588 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
589 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
590 _item3 = item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
591 _item4 = item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
592 _item5 = item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
593 _item6 = item6;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
594 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
595
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
596 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
597 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
598 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
599 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
600
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
601 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
602 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
603 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
604 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
605
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
606 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
607 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
608 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
609 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
610
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
611 var tuple = other as Tuple<T1,T2,T3,T4,T5,T6>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
612
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
613 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
614 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
615
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
616 int num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
617
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
618 num = comparer.Compare(_item1, tuple._item1); if (num == 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
619 num = comparer.Compare(_item2, tuple._item2); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
620 num = comparer.Compare(_item3, tuple._item3); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
621 num = comparer.Compare(_item4, tuple._item4); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
622 num = comparer.Compare(_item5, tuple._item5); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
623
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
624 return comparer.Compare(_item6, tuple._item6);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
625 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
626
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
627 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
628 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
629 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
630 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
631
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
632 var tuple = other as Tuple<T1,T2,T3,T4,T5,T6>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
633
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
634 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
635 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
636
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
637 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
638 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
639 comparer.Equals(_item2, tuple._item2) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
640 comparer.Equals(_item3, tuple._item3) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
641 comparer.Equals(_item4, tuple._item4) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
642 comparer.Equals(_item5, tuple._item5) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
643 comparer.Equals(_item6, tuple._item6);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
644 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
645
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
646 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
647 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
648 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
649 Tuple.CombineHashCodes(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
650 comparer.GetHashCode(_item1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
651 comparer.GetHashCode(_item2),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
652 comparer.GetHashCode(_item3),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
653 comparer.GetHashCode(_item4),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
654 comparer.GetHashCode(_item5),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
655 comparer.GetHashCode(_item6));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
656 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
657
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
658 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
659 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
660 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
661 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
662
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
663 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
664 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
665 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
666 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
667
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
668 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
669 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
670 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
671 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
672 .Append(_item2).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
673 .Append(_item3).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
674 .Append(_item4).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
675 .Append(_item5).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
676 .Append(_item6).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
677
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
678 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
679 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
680
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
681 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
682 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
683 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
684 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
685 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
686 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
687
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
688 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
689 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
690 public T3 Item3 { get { return _item3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
691 public T4 Item4 { get { return _item4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
692 public T5 Item5 { get { return _item5; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
693 public T6 Item6 { get { return _item6; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
694
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
695 int ITuple.Size { get { return 6; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
696 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
697
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
698 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
699 public class Tuple<T1,T2,T3,T4,T5,T6,T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
700 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
701 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
702 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
703 readonly T3 _item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
704 readonly T4 _item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
705 readonly T5 _item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
706 readonly T6 _item6;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
707 readonly T7 _item7;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
708
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
709 public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
710 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
711 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
712 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
713 _item3 = item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
714 _item4 = item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
715 _item5 = item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
716 _item6 = item6;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
717 _item7 = item7;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
718 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
719
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
720 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
721 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
722 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
723 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
724
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
725 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
726 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
727 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
728 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
729
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
730 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
731 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
732 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
733 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
734
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
735 var tuple = other as Tuple<T1,T2,T3,T4,T5,T6,T7>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
736
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
737 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
738 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
739
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
740 int num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
741
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
742 num = comparer.Compare(_item1, tuple._item1); if (num == 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
743 num = comparer.Compare(_item2, tuple._item2); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
744 num = comparer.Compare(_item3, tuple._item3); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
745 num = comparer.Compare(_item4, tuple._item4); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
746 num = comparer.Compare(_item5, tuple._item5); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
747 num = comparer.Compare(_item6, tuple._item6); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
748
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
749 return comparer.Compare(_item7, tuple._item7);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
750 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
751
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
752 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
753 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
754 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
755 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
756
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
757 var tuple = other as Tuple<T1,T2,T3,T4,T5,T6,T7>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
758
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
759 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
760 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
761
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
762 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
763 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
764 comparer.Equals(_item2, tuple._item2) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
765 comparer.Equals(_item3, tuple._item3) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
766 comparer.Equals(_item4, tuple._item4) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
767 comparer.Equals(_item5, tuple._item5) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
768 comparer.Equals(_item6, tuple._item6) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
769 comparer.Equals(_item7, tuple._item7);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
770 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
771
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
772 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
773 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
774 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
775 Tuple.CombineHashCodes(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
776 comparer.GetHashCode(_item1),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
777 comparer.GetHashCode(_item2),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
778 comparer.GetHashCode(_item3),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
779 comparer.GetHashCode(_item4),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
780 comparer.GetHashCode(_item5),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
781 comparer.GetHashCode(_item6),
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
782 comparer.GetHashCode(_item7));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
783 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
784
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
785 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
786 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
787 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
788 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
789
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
790 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
791 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
792 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
793 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
794
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
795 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
796 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
797 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
798 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
799 .Append(_item2).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
800 .Append(_item3).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
801 .Append(_item4).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
802 .Append(_item5).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
803 .Append(_item6).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
804 .Append(_item7).Append(")");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
805
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
806 return sb.ToString();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
807 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
808
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
809 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
810 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
811 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
812 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
813 return ((ITuple) this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
814 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
815
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
816 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
817 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
818 public T3 Item3 { get { return _item3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
819 public T4 Item4 { get { return _item4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
820 public T5 Item5 { get { return _item5; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
821 public T6 Item6 { get { return _item6; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
822 public T7 Item7 { get { return _item7; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
823
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
824 int ITuple.Size { get { return 7; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
825 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
826
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
827 [Serializable]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
828 public class Tuple<T1,T2,T3,T4,T5,T6,T7,TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
829 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
830 readonly T1 _item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
831 readonly T2 _item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
832 readonly T3 _item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
833 readonly T4 _item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
834 readonly T5 _item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
835 readonly T6 _item6;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
836 readonly T7 _item7;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
837 readonly TRest _rest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
838
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
839 public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
840 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
841 if (!(rest is ITuple))
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
842 throw new ArgumentException("Argument 'rest' is not a tuple", "rest");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
843
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
844 _item1 = item1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
845 _item2 = item2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
846 _item3 = item3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
847 _item4 = item4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
848 _item5 = item5;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
849 _item6 = item6;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
850 _item7 = item7;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
851 _rest = rest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
852 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
853
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
854 public override bool Equals(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
855 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
856 return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
857 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
858
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
859 public override int GetHashCode()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
860 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
861 return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
862 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
863
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
864 int IStructuralComparable.CompareTo(object other, IComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
865 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
866 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
867 return 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
868
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
869 var tuple = other as Tuple<T1,T2,T3,T4,T5,T6,T7,TRest>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
870
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
871 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
872 throw new ArgumentException(string.Format("Type '{0}' is not a tuple", other.GetType()), "other");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
873
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
874 int num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
875
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
876 num = comparer.Compare(_item1, tuple._item1); if (num == 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
877 num = comparer.Compare(_item2, tuple._item2); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
878 num = comparer.Compare(_item3, tuple._item3); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
879 num = comparer.Compare(_item4, tuple._item4); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
880 num = comparer.Compare(_item5, tuple._item5); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
881 num = comparer.Compare(_item6, tuple._item6); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
882 num = comparer.Compare(_item7, tuple._item7); if (num != 0) return num;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
883
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
884 return comparer.Compare(_rest, tuple._rest);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
885 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
886
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
887 bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
888 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
889 if (other == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
890 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
891
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
892 var tuple = other as Tuple<T1,T2,T3,T4,T5,T6,T7,TRest>;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
893
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
894 if (tuple == null)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
895 return false;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
896
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
897 return
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
898 comparer.Equals(_item1, tuple._item1) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
899 comparer.Equals(_item2, tuple._item2) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
900 comparer.Equals(_item3, tuple._item3) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
901 comparer.Equals(_item4, tuple._item4) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
902 comparer.Equals(_item5, tuple._item5) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
903 comparer.Equals(_item6, tuple._item6) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
904 comparer.Equals(_item7, tuple._item7) &&
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
905 comparer.Equals(_rest, tuple._rest);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
906 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
907
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
908 int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
909 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
910 var rest = (ITuple)_rest;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
911
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
912 if (rest.Size >= 8)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
913 return rest.GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
914
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
915 switch (8 - rest.Size)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
916 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
917 case 1: return Tuple.CombineHashCodes(comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
918 case 2: return Tuple.CombineHashCodes(comparer.GetHashCode(_item6), comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
919 case 3: return Tuple.CombineHashCodes(comparer.GetHashCode(_item5), comparer.GetHashCode(_item6), comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
920 case 4: return Tuple.CombineHashCodes(comparer.GetHashCode(_item4), comparer.GetHashCode(_item5), comparer.GetHashCode(_item6), comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
921 case 5: return Tuple.CombineHashCodes(comparer.GetHashCode(_item3), comparer.GetHashCode(_item4), comparer.GetHashCode(_item5), comparer.GetHashCode(_item6), comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
922 case 6: return Tuple.CombineHashCodes(comparer.GetHashCode(_item2), comparer.GetHashCode(_item3), comparer.GetHashCode(_item4), comparer.GetHashCode(_item5), comparer.GetHashCode(_item6), comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
923 case 7: return Tuple.CombineHashCodes(comparer.GetHashCode(_item1), comparer.GetHashCode(_item2), comparer.GetHashCode(_item3), comparer.GetHashCode(_item4), comparer.GetHashCode(_item5), comparer.GetHashCode(_item6), comparer.GetHashCode(_item7), rest.GetHashCode(comparer));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
924 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
925
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
926 return -1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
927 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
928
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
929 int IComparable.CompareTo(object obj)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
930 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
931 return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
932 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
933
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
934 int ITuple.GetHashCode(IEqualityComparer comparer)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
935 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
936 return ((IStructuralEquatable)this).GetHashCode(comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
937 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
938
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
939 string ITuple.ToString(StringBuilder sb)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
940 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
941 sb
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
942 .Append(_item1).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
943 .Append(_item2).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
944 .Append(_item3).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
945 .Append(_item4).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
946 .Append(_item5).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
947 .Append(_item6).Append(", ")
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
948 .Append(_item7).Append(", ");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
949
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
950 return ((ITuple)_rest).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
951 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
952
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
953 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
954 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
955 var sb = new StringBuilder();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
956 sb.Append("(");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
957 return ((ITuple)this).ToString(sb);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
958 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
959
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
960 public T1 Item1 { get { return _item1; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
961 public T2 Item2 { get { return _item2; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
962 public T3 Item3 { get { return _item3; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
963 public T4 Item4 { get { return _item4; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
964 public T5 Item5 { get { return _item5; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
965 public T6 Item6 { get { return _item6; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
966 public T7 Item7 { get { return _item7; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
967 public TRest Rest { get { return _rest; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
968
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
969 int ITuple.Size { get { return 7 + ((ITuple)_rest).Size; } }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
970 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
971
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
972 #endregion
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
973
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
974 namespace Collections
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
975 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
976 public interface IStructuralEquatable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
977 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
978 bool Equals (object other, IEqualityComparer comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
979 int GetHashCode(IEqualityComparer comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
980 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
981
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
982 public interface IStructuralComparable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
983 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
984 int CompareTo(object other, IComparer comparer);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
985 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
986 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
987 }