Updates referencesource to .NET 4.7
[mono.git] / mcs / class / referencesource / mscorlib / system / threading / lockcookie.cs
1 // ==++==
2 // 
3 //   Copyright (c) Microsoft Corporation.  All rights reserved.
4 // 
5 // ==--==
6 //
7 // <OWNER>Microsoft</OWNER>
8 /*============================================================
9 **
10 ** Class:    LockCookie
11 **
12 **
13 ** Purpose: Defines the lock that implements 
14 **          single-writer/multiple-reader semantics
15 **
16 **
17 ===========================================================*/
18
19 namespace System.Threading {
20
21     using System;
22     [System.Runtime.InteropServices.ComVisible(true)]
23     public struct LockCookie
24     {
25         private int _dwFlags;
26         private int _dwWriterSeqNum;
27         private int _wReaderAndWriterLevel;
28         private int _dwThreadID;
29
30         public override int GetHashCode()
31         {
32             // review - Microsoft!
33             return _dwFlags + _dwWriterSeqNum + _wReaderAndWriterLevel + _dwThreadID;
34         }
35         
36         public override bool Equals(Object obj)
37         {
38             if (obj is LockCookie)
39                 return Equals((LockCookie)obj);
40             else
41                 return false;
42         }
43         
44         public bool Equals(LockCookie obj)
45         {
46             return obj._dwFlags == _dwFlags && obj._dwWriterSeqNum == _dwWriterSeqNum &&
47                 obj._wReaderAndWriterLevel == _wReaderAndWriterLevel && obj._dwThreadID == _dwThreadID;
48         }
49         
50         public static bool operator ==(LockCookie a, LockCookie b)
51         {
52             return a.Equals(b);
53         }
54         
55         public static bool operator !=(LockCookie a, LockCookie b)
56         {
57             return !(a == b);
58         }
59     }
60 }
61