summaryrefslogtreecommitdiff
path: root/src/mscorlib/src/System/Tuple.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/mscorlib/src/System/Tuple.cs')
-rw-r--r--src/mscorlib/src/System/Tuple.cs729
1 files changed, 519 insertions, 210 deletions
diff --git a/src/mscorlib/src/System/Tuple.cs b/src/mscorlib/src/System/Tuple.cs
index 037b2ceee8..bb0dbcad6f 100644
--- a/src/mscorlib/src/System/Tuple.cs
+++ b/src/mscorlib/src/System/Tuple.cs
@@ -7,161 +7,206 @@ using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.Contracts;
+using System.Runtime.CompilerServices;
//
// Note: F# compiler depends on the exact tuple hashing algorithm. Do not ever change it.
//
-namespace System {
+namespace System
+{
/// <summary>
/// Helper so we can call some tuple methods recursively without knowing the underlying types.
/// </summary>
- internal interface ITuple {
+ internal interface ITupleInternal : ITuple
+ {
string ToString(StringBuilder sb);
int GetHashCode(IEqualityComparer comparer);
- int Size { get; }
-
}
- public static class Tuple {
- public static Tuple<T1> Create<T1>(T1 item1) {
+ public static class Tuple
+ {
+ public static Tuple<T1> Create<T1>(T1 item1)
+ {
return new Tuple<T1>(item1);
}
- public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2) {
+ public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
+ {
return new Tuple<T1, T2>(item1, item2);
}
- public static Tuple<T1, T2, T3> Create<T1, T2, T3>(T1 item1, T2 item2, T3 item3) {
+ 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);
}
- public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4) {
+ public static Tuple<T1, T2, T3, T4> Create<T1, T2, T3, T4>(T1 item1, T2 item2, T3 item3, T4 item4)
+ {
return new Tuple<T1, T2, T3, T4>(item1, item2, item3, item4);
}
- public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) {
+ public static Tuple<T1, T2, T3, T4, T5> Create<T1, T2, T3, T4, T5>(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+ {
return new Tuple<T1, T2, T3, T4, T5>(item1, item2, item3, item4, item5);
}
- 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) {
+ 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)
+ {
return new Tuple<T1, T2, T3, T4, T5, T6>(item1, item2, item3, item4, item5, item6);
}
- 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) {
+ 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)
+ {
return new Tuple<T1, T2, T3, T4, T5, T6, T7>(item1, item2, item3, item4, item5, item6, item7);
}
- 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) {
+ 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)
+ {
return new Tuple<T1, T2, T3, T4, T5, T6, T7, Tuple<T8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<T8>(item8));
}
// From System.Web.Util.HashCodeCombiner
- internal static int CombineHashCodes(int h1, int h2) {
+ internal static int CombineHashCodes(int h1, int h2)
+ {
return (((h1 << 5) + h1) ^ h2);
}
- internal static int CombineHashCodes(int h1, int h2, int h3) {
+ internal static int CombineHashCodes(int h1, int h2, int h3)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2), h3);
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4));
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5) {
+ internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5)
+ {
return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), h5);
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6) {
+ 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));
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7) {
+ 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));
}
- internal static int CombineHashCodes(int h1, int h2, int h3, int h4, int h5, int h6, int h7, int h8) {
+ 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));
}
}
[Serializable]
- public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
public T1 Item1 { get { return m_Item1; } }
- public Tuple(T1 item1) {
+ public Tuple(T1 item1)
+ {
m_Item1 = item1;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default);
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1> objTuple = other as Tuple<T1>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1> objTuple = other as Tuple<T1>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
return comparer.Compare(m_Item1, objTuple.m_Item1);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return comparer.GetHashCode(m_Item1);
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(")");
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 1;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 1;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ if (index != 0)
+ {
+ throw new IndexOutOfRangeException();
+ }
+ return Item1;
}
}
}
[Serializable]
- public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -169,38 +214,45 @@ namespace System {
public T1 Item1 { get { return m_Item1; } }
public T2 Item2 { get { return m_Item2; } }
- public Tuple(T1 item1, T2 item2) {
+ public Tuple(T1 item1, T2 item2)
+ {
m_Item1 = item1;
m_Item2 = item2;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2> objTuple = other as Tuple<T1, T2>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2> objTuple = other as Tuple<T1, T2>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -212,24 +264,29 @@ namespace System {
return comparer.Compare(m_Item2, objTuple.m_Item2);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -237,15 +294,34 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 2;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 2;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -255,39 +331,46 @@ namespace System {
public T2 Item2 { get { return m_Item2; } }
public T3 Item3 { get { return m_Item3; } }
- public Tuple(T1 item1, T2 item2, T3 item3) {
+ public Tuple(T1 item1, T2 item2, T3 item3)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3> objTuple = other as Tuple<T1, T2, T3>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3> objTuple = other as Tuple<T1, T2, T3>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -303,24 +386,29 @@ namespace System {
return comparer.Compare(m_Item3, objTuple.m_Item3);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -330,15 +418,36 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 3;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 3;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -350,40 +459,47 @@ namespace System {
public T3 Item3 { get { return m_Item3; } }
public T4 Item4 { get { return m_Item4; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
m_Item4 = item4;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4> objTuple = other as Tuple<T1, T2, T3, T4>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4> objTuple = other as Tuple<T1, T2, T3, T4>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -403,24 +519,29 @@ namespace System {
return comparer.Compare(m_Item4, objTuple.m_Item4);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -432,15 +553,38 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 4;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 4;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -454,7 +598,8 @@ namespace System {
public T4 Item4 { get { return m_Item4; } }
public T5 Item5 { get { return m_Item5; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
@@ -462,33 +607,39 @@ namespace System {
m_Item5 = item5;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5> objTuple = other as Tuple<T1, T2, T3, T4, T5>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5> objTuple = other as Tuple<T1, T2, T3, T4, T5>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -512,24 +663,29 @@ namespace System {
return comparer.Compare(m_Item5, objTuple.m_Item5);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -543,15 +699,40 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 5;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 5;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5, T6> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5, T6> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -567,7 +748,8 @@ namespace System {
public T5 Item5 { get { return m_Item5; } }
public T6 Item6 { get { return m_Item6; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
@@ -576,33 +758,39 @@ namespace System {
m_Item6 = item6;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5, T6> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5) && comparer.Equals(m_Item6, objTuple.m_Item6);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5, T6> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -630,24 +818,29 @@ namespace System {
return comparer.Compare(m_Item6, objTuple.m_Item6);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -663,15 +856,42 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 6;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 6;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -689,7 +909,8 @@ namespace System {
public T6 Item6 { get { return m_Item6; } }
public T7 Item7 { get { return m_Item7; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7)
+ {
m_Item1 = item1;
m_Item2 = item2;
m_Item3 = item3;
@@ -699,33 +920,39 @@ namespace System {
m_Item7 = item7;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5) && comparer.Equals(m_Item6, objTuple.m_Item6) && comparer.Equals(m_Item7, objTuple.m_Item7);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -757,24 +984,29 @@ namespace System {
return comparer.Compare(m_Item7, objTuple.m_Item7);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7));
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -792,15 +1024,44 @@ namespace System {
return sb.ToString();
}
- int ITuple.Size {
- get {
- return 7;
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length => 7;
+
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ case 6:
+ return Item7;
+ default:
+ throw new IndexOutOfRangeException();
+ }
}
}
}
[Serializable]
- public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITuple {
+ public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
+ {
private readonly T1 m_Item1;
private readonly T2 m_Item2;
@@ -820,8 +1081,10 @@ namespace System {
public T7 Item7 { get { return m_Item7; } }
public TRest Rest { get { return m_Rest; } }
- public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest) {
- if (!(rest is ITuple)) {
+ public Tuple(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, TRest rest)
+ {
+ if (!(rest is ITupleInternal))
+ {
throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleLastArgumentNotATuple"));
}
@@ -835,33 +1098,39 @@ namespace System {
m_Rest = rest;
}
- public override Boolean Equals(Object obj) {
- return ((IStructuralEquatable) this).Equals(obj, EqualityComparer<Object>.Default);;
+ public override Boolean Equals(Object obj)
+ {
+ return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<Object>.Default); ;
}
- Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer) {
+ Boolean IStructuralEquatable.Equals(Object other, IEqualityComparer comparer)
+ {
if (other == null) return false;
Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>;
- if (objTuple == null) {
+ if (objTuple == null)
+ {
return false;
}
return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3) && comparer.Equals(m_Item4, objTuple.m_Item4) && comparer.Equals(m_Item5, objTuple.m_Item5) && comparer.Equals(m_Item6, objTuple.m_Item6) && comparer.Equals(m_Item7, objTuple.m_Item7) && comparer.Equals(m_Rest, objTuple.m_Rest);
}
- Int32 IComparable.CompareTo(Object obj) {
- return ((IStructuralComparable) this).CompareTo(obj, Comparer<Object>.Default);
+ Int32 IComparable.CompareTo(Object obj)
+ {
+ return ((IStructuralComparable)this).CompareTo(obj, Comparer<Object>.Default);
}
- Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer) {
+ Int32 IStructuralComparable.CompareTo(Object other, IComparer comparer)
+ {
if (other == null) return 1;
Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple = other as Tuple<T1, T2, T3, T4, T5, T6, T7, TRest>;
- if (objTuple == null) {
- throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), nameof(other));
+ if (objTuple == null)
+ {
+ throw new ArgumentException(Environment.GetResourceString("ArgumentException_TupleIncorrectType", this.GetType().ToString()), "other");
}
int c = 0;
@@ -897,47 +1166,53 @@ namespace System {
return comparer.Compare(m_Rest, objTuple.m_Rest);
}
- public override int GetHashCode() {
- return ((IStructuralEquatable) this).GetHashCode(EqualityComparer<Object>.Default);
+ public override int GetHashCode()
+ {
+ return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<Object>.Default);
}
- Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
+ Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
+ {
// We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
- ITuple t = (ITuple) m_Rest;
- if(t.Size >= 8) { return t.GetHashCode(comparer); }
-
+ ITupleInternal t = (ITupleInternal)m_Rest;
+ if (t.Length >= 8) { return t.GetHashCode(comparer); }
+
// In this case, the rest memeber has less than 8 elements so we need to combine some our elements with the elements in rest
- int k = 8 - t.Size;
- switch(k) {
+ int k = 8 - t.Length;
+ switch (k)
+ {
case 1:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 2:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 3:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 4:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 5:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 6:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
case 7:
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
+ return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
}
Debug.Assert(false, "Missed all cases for computing Tuple hash code");
return -1;
}
- Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
- return ((IStructuralEquatable) this).GetHashCode(comparer);
+ Int32 ITupleInternal.GetHashCode(IEqualityComparer comparer)
+ {
+ return ((IStructuralEquatable)this).GetHashCode(comparer);
}
- public override string ToString() {
+ public override string ToString()
+ {
StringBuilder sb = new StringBuilder();
sb.Append("(");
- return ((ITuple)this).ToString(sb);
+ return ((ITupleInternal)this).ToString(sb);
}
- string ITuple.ToString(StringBuilder sb) {
+ string ITupleInternal.ToString(StringBuilder sb)
+ {
sb.Append(m_Item1);
sb.Append(", ");
sb.Append(m_Item2);
@@ -952,12 +1227,46 @@ namespace System {
sb.Append(", ");
sb.Append(m_Item7);
sb.Append(", ");
- return ((ITuple)m_Rest).ToString(sb);
+ return ((ITupleInternal)m_Rest).ToString(sb);
+ }
+
+ /// <summary>
+ /// The number of positions in this data structure.
+ /// </summary>
+ int ITuple.Length
+ {
+ get
+ {
+ return 7 + ((ITupleInternal)Rest).Length;
+ }
}
- int ITuple.Size {
- get {
- return 7 + ((ITuple)m_Rest).Size;
+ /// <summary>
+ /// Get the element at position <param name="index"/>.
+ /// </summary>
+ object ITuple.this[int index]
+ {
+ get
+ {
+ switch (index)
+ {
+ case 0:
+ return Item1;
+ case 1:
+ return Item2;
+ case 2:
+ return Item3;
+ case 3:
+ return Item4;
+ case 4:
+ return Item5;
+ case 5:
+ return Item6;
+ case 6:
+ return Item7;
+ }
+
+ return ((ITupleInternal)Rest)[index - 7];
}
}
}