Implement MachineKey.Protect and MachineKey.Unprotect
[mono.git] / mcs / class / System.ComponentModel.Composition / src / ComponentModel / System / Tuple.cs
1 // -----------------------------------------------------------------------\r
2 // Copyright (c) Microsoft Corporation.  All rights reserved.\r
3 // -----------------------------------------------------------------------\r
4 #if !CLR40\r
5 using System;\r
6 \r
7 namespace System\r
8 {\r
9     // This is a very minimalistic implementation of Tuple'2 that allows us\r
10     // to compile and work on versions of .Net eariler then 4.0.\r
11     public struct Tuple<TItem1, TItem2>\r
12     {\r
13         public Tuple(TItem1 item1, TItem2 item2)\r
14         {\r
15             this = new Tuple<TItem1, TItem2>();\r
16             this.Item1 = item1;\r
17             this.Item2 = item2;\r
18         }\r
19 \r
20         public TItem1 Item1 { get; private set; }\r
21         public TItem2 Item2 { get; private set; }\r
22 \r
23         public override bool Equals(object obj)\r
24         {\r
25             if (obj is Tuple<TItem1, TItem2>)\r
26             {\r
27                 Tuple<TItem1, TItem2> that = (Tuple<TItem1, TItem2>)obj;\r
28                 return object.Equals(this.Item1, that.Item1) && object.Equals(this.Item2, that.Item2);\r
29             }\r
30             else\r
31             {\r
32                 return false;\r
33             }\r
34         }\r
35 \r
36         public override int GetHashCode()\r
37         {\r
38             return ((this.Item1 != null) ? this.Item1.GetHashCode() : 0) ^ ((this.Item2 != null) ? this.Item2.GetHashCode() : 0);\r
39         }\r
40 \r
41         public static bool operator ==(Tuple<TItem1, TItem2> left, Tuple<TItem1, TItem2> right)\r
42         {\r
43             return left.Equals(right);\r
44         }\r
45 \r
46         public static bool operator !=(Tuple<TItem1, TItem2> left, Tuple<TItem1, TItem2> right)\r
47         {\r
48             return !left.Equals(right);\r
49         }\r
50     }\r
51 }\r
52 #endif