Updates referencesource to .NET 4.7
[mono-project.git] / mcs / class / referencesource / mscorlib / system / diagnostics / eventing / eventdescriptor.cs
blob60eae4d2d7d02314fd6c24569f81dfb4d5d04c72
1 //------------------------------------------------------------------------------
2 // <copyright file="etwprovider.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
4 // </copyright>
5 // <OWNER>Microsoft</OWNER>
6 //------------------------------------------------------------------------------
7 using System;
8 using System.Runtime.InteropServices;
10 #if ES_BUILD_STANDALONE
11 using Environment = Microsoft.Diagnostics.Tracing.Internal.Environment;
12 #endif
14 #if !ES_BUILD_AGAINST_DOTNET_V35
15 using Contract = System.Diagnostics.Contracts.Contract;
16 #else
17 using Contract = Microsoft.Diagnostics.Contracts.Internal.Contract;
18 #endif
20 #if ES_BUILD_STANDALONE
21 namespace Microsoft.Diagnostics.Tracing
22 #else
23 namespace System.Diagnostics.Tracing
24 #endif
26 [StructLayout(LayoutKind.Explicit, Size = 16)]
27 [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
28 internal struct EventDescriptor
30 # region private
31 [FieldOffset(0)]
32 private int m_traceloggingId;
33 [FieldOffset(0)]
34 private ushort m_id;
35 [FieldOffset(2)]
36 private byte m_version;
37 [FieldOffset(3)]
38 private byte m_channel;
39 [FieldOffset(4)]
40 private byte m_level;
41 [FieldOffset(5)]
42 private byte m_opcode;
43 [FieldOffset(6)]
44 private ushort m_task;
45 [FieldOffset(8)]
46 private long m_keywords;
47 #endregion
49 public EventDescriptor(
50 int traceloggingId,
51 byte level,
52 byte opcode,
53 long keywords
56 this.m_id = 0;
57 this.m_version = 0;
58 this.m_channel = 0;
59 this.m_traceloggingId = traceloggingId;
60 this.m_level = level;
61 this.m_opcode = opcode;
62 this.m_task = 0;
63 this.m_keywords = keywords;
66 public EventDescriptor(
67 int id,
68 byte version,
69 byte channel,
70 byte level,
71 byte opcode,
72 int task,
73 long keywords
76 if (id < 0)
78 throw new ArgumentOutOfRangeException("id", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
81 if (id > ushort.MaxValue)
83 throw new ArgumentOutOfRangeException("id", Environment.GetResourceString("ArgumentOutOfRange_NeedValidId", 1, ushort.MaxValue));
86 m_traceloggingId = 0;
87 m_id = (ushort)id;
88 m_version = version;
89 m_channel = channel;
90 m_level = level;
91 m_opcode = opcode;
92 m_keywords = keywords;
94 if (task < 0)
96 throw new ArgumentOutOfRangeException("task", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
99 if (task > ushort.MaxValue)
101 throw new ArgumentOutOfRangeException("task", Environment.GetResourceString("ArgumentOutOfRange_NeedValidId", 1, ushort.MaxValue));
104 m_task = (ushort)task;
107 public int EventId {
108 get {
109 return m_id;
112 public byte Version
116 return m_version;
119 public byte Channel
123 return m_channel;
126 public byte Level
130 return m_level;
133 public byte Opcode
137 return m_opcode;
140 public int Task
144 return m_task;
147 public long Keywords
151 return m_keywords;
155 public override bool Equals(object obj)
157 if (!(obj is EventDescriptor))
158 return false;
160 return Equals((EventDescriptor) obj);
163 public override int GetHashCode()
165 return m_id ^ m_version ^ m_channel ^ m_level ^ m_opcode ^ m_task ^ (int)m_keywords;
168 public bool Equals(EventDescriptor other)
170 if ((m_id != other.m_id) ||
171 (m_version != other.m_version) ||
172 (m_channel != other.m_channel) ||
173 (m_level != other.m_level) ||
174 (m_opcode != other.m_opcode) ||
175 (m_task != other.m_task) ||
176 (m_keywords != other.m_keywords))
178 return false;
180 return true;
183 public static bool operator ==(EventDescriptor event1, EventDescriptor event2)
185 return event1.Equals(event2);
188 public static bool operator !=(EventDescriptor event1, EventDescriptor event2)
190 return !event1.Equals(event2);