| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239 |
- // Licensed to the .NET Foundation under one or more agreements.
- // The .NET Foundation licenses this file to you under the MIT license.
- // See the LICENSE file in the project root for more information.
- using System.Collections;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Runtime.CompilerServices;
- using System.Text;
- //
- // Note: F# compiler depends on the exact tuple hashing algorithm. Do not ever change it.
- //
- namespace System
- {
- /// <summary>
- /// Helper so we can call some tuple methods recursively without knowing the underlying types.
- /// </summary>
- internal interface ITupleInternal : ITuple
- {
- string ToString(StringBuilder sb);
- int GetHashCode(IEqualityComparer comparer);
- }
- 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)
- {
- return new Tuple<T1, T2>(item1, item2);
- }
- 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)
- {
- 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)
- {
- 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)
- {
- 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)
- {
- 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)
- {
- 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)
- {
- return (((h1 << 5) + h1) ^ h2);
- }
- 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)
- {
- return CombineHashCodes(CombineHashCodes(h1, h2), CombineHashCodes(h3, h4));
- }
- 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)
- {
- 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)
- {
- 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)
- {
- return CombineHashCodes(CombineHashCodes(h1, h2, h3, h4), CombineHashCodes(h5, h6, h7, h8));
- }
- }
- [Serializable]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public Tuple(T1 item1)
- {
- m_Item1 = item1;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default);
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1> objTuple))
- {
- return false;
- }
- return comparer.Equals(m_Item1, objTuple.m_Item1);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- return comparer.Compare(m_Item1, objTuple.m_Item1);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return comparer.GetHashCode(m_Item1);
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public Tuple(T1 item1, T2 item2)
- {
- m_Item1 = item1;
- m_Item2 = item2;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2> objTuple))
- {
- return false;
- }
- return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- return comparer.Compare(m_Item2, objTuple.m_Item2);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2));
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2, T3> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- private readonly T3 m_Item3; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public T3 Item3 { get { return m_Item3; } }
- public Tuple(T1 item1, T2 item2, T3 item3)
- {
- m_Item1 = item1;
- m_Item2 = item2;
- m_Item3 = item3;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2, T3> objTuple))
- {
- return false;
- }
- return comparer.Equals(m_Item1, objTuple.m_Item1) && comparer.Equals(m_Item2, objTuple.m_Item2) && comparer.Equals(m_Item3, objTuple.m_Item3);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2, T3> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- c = comparer.Compare(m_Item2, objTuple.m_Item2);
- if (c != 0) return c;
- return comparer.Compare(m_Item3, objTuple.m_Item3);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3));
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(", ");
- sb.Append(m_Item3);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2, T3, T4> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- private readonly T3 m_Item3; // Do not rename (binary serialization)
- private readonly T4 m_Item4; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public T3 Item3 { get { return m_Item3; } }
- public T4 Item4 { get { return m_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 bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2, T3, T4> objTuple))
- {
- 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);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2, T3, T4> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- c = comparer.Compare(m_Item2, objTuple.m_Item2);
- if (c != 0) return c;
- c = comparer.Compare(m_Item3, objTuple.m_Item3);
- if (c != 0) return c;
- return comparer.Compare(m_Item4, objTuple.m_Item4);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4));
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(", ");
- sb.Append(m_Item3);
- sb.Append(", ");
- sb.Append(m_Item4);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2, T3, T4, T5> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- private readonly T3 m_Item3; // Do not rename (binary serialization)
- private readonly T4 m_Item4; // Do not rename (binary serialization)
- private readonly T5 m_Item5; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public T3 Item3 { get { return m_Item3; } }
- 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)
- {
- m_Item1 = item1;
- m_Item2 = item2;
- m_Item3 = item3;
- m_Item4 = item4;
- m_Item5 = item5;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2, T3, T4, T5> objTuple))
- {
- 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);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2, T3, T4, T5> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- c = comparer.Compare(m_Item2, objTuple.m_Item2);
- if (c != 0) return c;
- c = comparer.Compare(m_Item3, objTuple.m_Item3);
- if (c != 0) return c;
- c = comparer.Compare(m_Item4, objTuple.m_Item4);
- if (c != 0) return c;
- return comparer.Compare(m_Item5, objTuple.m_Item5);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int 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));
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(", ");
- sb.Append(m_Item3);
- sb.Append(", ");
- sb.Append(m_Item4);
- sb.Append(", ");
- sb.Append(m_Item5);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2, T3, T4, T5, T6> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- private readonly T3 m_Item3; // Do not rename (binary serialization)
- private readonly T4 m_Item4; // Do not rename (binary serialization)
- private readonly T5 m_Item5; // Do not rename (binary serialization)
- private readonly T6 m_Item6; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public T3 Item3 { get { return m_Item3; } }
- public T4 Item4 { get { return m_Item4; } }
- 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)
- {
- m_Item1 = item1;
- m_Item2 = item2;
- m_Item3 = item3;
- m_Item4 = item4;
- m_Item5 = item5;
- m_Item6 = item6;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2, T3, T4, T5, T6> objTuple))
- {
- 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);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2, T3, T4, T5, T6> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- c = comparer.Compare(m_Item2, objTuple.m_Item2);
- if (c != 0) return c;
- c = comparer.Compare(m_Item3, objTuple.m_Item3);
- if (c != 0) return c;
- c = comparer.Compare(m_Item4, objTuple.m_Item4);
- if (c != 0) return c;
- c = comparer.Compare(m_Item5, objTuple.m_Item5);
- if (c != 0) return c;
- return comparer.Compare(m_Item6, objTuple.m_Item6);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int 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));
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(", ");
- sb.Append(m_Item3);
- sb.Append(", ");
- sb.Append(m_Item4);
- sb.Append(", ");
- sb.Append(m_Item5);
- sb.Append(", ");
- sb.Append(m_Item6);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2, T3, T4, T5, T6, T7> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- private readonly T3 m_Item3; // Do not rename (binary serialization)
- private readonly T4 m_Item4; // Do not rename (binary serialization)
- private readonly T5 m_Item5; // Do not rename (binary serialization)
- private readonly T6 m_Item6; // Do not rename (binary serialization)
- private readonly T7 m_Item7; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public T3 Item3 { get { return m_Item3; } }
- public T4 Item4 { get { return m_Item4; } }
- public T5 Item5 { get { return m_Item5; } }
- 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)
- {
- m_Item1 = item1;
- m_Item2 = item2;
- m_Item3 = item3;
- m_Item4 = item4;
- m_Item5 = item5;
- m_Item6 = item6;
- m_Item7 = item7;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple))
- {
- 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);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- c = comparer.Compare(m_Item2, objTuple.m_Item2);
- if (c != 0) return c;
- c = comparer.Compare(m_Item3, objTuple.m_Item3);
- if (c != 0) return c;
- c = comparer.Compare(m_Item4, objTuple.m_Item4);
- if (c != 0) return c;
- c = comparer.Compare(m_Item5, objTuple.m_Item5);
- if (c != 0) return c;
- c = comparer.Compare(m_Item6, objTuple.m_Item6);
- if (c != 0) return c;
- return comparer.Compare(m_Item7, objTuple.m_Item7);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int 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));
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(", ");
- sb.Append(m_Item3);
- sb.Append(", ");
- sb.Append(m_Item4);
- sb.Append(", ");
- sb.Append(m_Item5);
- sb.Append(", ");
- sb.Append(m_Item6);
- sb.Append(", ");
- sb.Append(m_Item7);
- sb.Append(')');
- return sb.ToString();
- }
- /// <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]
- [System.Runtime.CompilerServices.TypeForwardedFrom("mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")]
- public class Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> : IStructuralEquatable, IStructuralComparable, IComparable, ITupleInternal, ITuple
- {
- private readonly T1 m_Item1; // Do not rename (binary serialization)
- private readonly T2 m_Item2; // Do not rename (binary serialization)
- private readonly T3 m_Item3; // Do not rename (binary serialization)
- private readonly T4 m_Item4; // Do not rename (binary serialization)
- private readonly T5 m_Item5; // Do not rename (binary serialization)
- private readonly T6 m_Item6; // Do not rename (binary serialization)
- private readonly T7 m_Item7; // Do not rename (binary serialization)
- private readonly TRest m_Rest; // Do not rename (binary serialization)
- public T1 Item1 { get { return m_Item1; } }
- public T2 Item2 { get { return m_Item2; } }
- public T3 Item3 { get { return m_Item3; } }
- public T4 Item4 { get { return m_Item4; } }
- public T5 Item5 { get { return m_Item5; } }
- public T6 Item6 { get { return m_Item6; } }
- 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 ITupleInternal))
- {
- throw new ArgumentException(SR.ArgumentException_TupleLastArgumentNotATuple);
- }
- m_Item1 = item1;
- m_Item2 = item2;
- m_Item3 = item3;
- m_Item4 = item4;
- m_Item5 = item5;
- m_Item6 = item6;
- m_Item7 = item7;
- m_Rest = rest;
- }
- public override bool Equals(object obj)
- {
- return ((IStructuralEquatable)this).Equals(obj, EqualityComparer<object>.Default); ;
- }
- bool IStructuralEquatable.Equals(object other, IEqualityComparer comparer)
- {
- if (other == null) return false;
- if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple))
- {
- 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);
- }
- int IComparable.CompareTo(object obj)
- {
- return ((IStructuralComparable)this).CompareTo(obj, Comparer<object>.Default);
- }
- int IStructuralComparable.CompareTo(object other, IComparer comparer)
- {
- if (other == null) return 1;
- if (!(other is Tuple<T1, T2, T3, T4, T5, T6, T7, TRest> objTuple))
- {
- throw new ArgumentException(SR.Format(SR.ArgumentException_TupleIncorrectType, this.GetType().ToString()), nameof(other));
- }
- int c = 0;
- c = comparer.Compare(m_Item1, objTuple.m_Item1);
- if (c != 0) return c;
- c = comparer.Compare(m_Item2, objTuple.m_Item2);
- if (c != 0) return c;
- c = comparer.Compare(m_Item3, objTuple.m_Item3);
- if (c != 0) return c;
- c = comparer.Compare(m_Item4, objTuple.m_Item4);
- if (c != 0) return c;
- c = comparer.Compare(m_Item5, objTuple.m_Item5);
- if (c != 0) return c;
- c = comparer.Compare(m_Item6, objTuple.m_Item6);
- if (c != 0) return c;
- c = comparer.Compare(m_Item7, objTuple.m_Item7);
- if (c != 0) return c;
- return comparer.Compare(m_Rest, objTuple.m_Rest);
- }
- public override int GetHashCode()
- {
- return ((IStructuralEquatable)this).GetHashCode(EqualityComparer<object>.Default);
- }
- int IStructuralEquatable.GetHashCode(IEqualityComparer comparer)
- {
- // We want to have a limited hash in this case. We'll use the last 8 elements of the tuple
- 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.Length;
- switch (k)
- {
- case 1:
- 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));
- case 3:
- 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));
- 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));
- 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));
- 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));
- }
- Debug.Fail("Missed all cases for computing Tuple hash code");
- return -1;
- }
- int ITupleInternal.GetHashCode(IEqualityComparer comparer)
- {
- return ((IStructuralEquatable)this).GetHashCode(comparer);
- }
- public override string ToString()
- {
- StringBuilder sb = new StringBuilder();
- sb.Append('(');
- return ((ITupleInternal)this).ToString(sb);
- }
- string ITupleInternal.ToString(StringBuilder sb)
- {
- sb.Append(m_Item1);
- sb.Append(", ");
- sb.Append(m_Item2);
- sb.Append(", ");
- sb.Append(m_Item3);
- sb.Append(", ");
- sb.Append(m_Item4);
- sb.Append(", ");
- sb.Append(m_Item5);
- sb.Append(", ");
- sb.Append(m_Item6);
- sb.Append(", ");
- sb.Append(m_Item7);
- sb.Append(", ");
- 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;
- }
- }
- /// <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];
- }
- }
- }
- }
|