1 //------------------------------------------------------------------------------
2 // <copyright file="etwprovider.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
5 // <OWNER>[....]</OWNER>
6 //------------------------------------------------------------------------------
8 using System.Runtime.InteropServices;
9 using System.Diagnostics.Contracts;
11 namespace System.Diagnostics.Tracing
13 [StructLayout(LayoutKind.Explicit, Size = 16)]
14 [System.Security.Permissions.HostProtection(MayLeakOnAbort = true)]
15 internal struct EventDescriptor
21 private byte m_version;
23 private byte m_channel;
27 private byte m_opcode;
29 private ushort m_task;
31 private long m_keywords;
34 public EventDescriptor(
46 throw new ArgumentOutOfRangeException("id", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
49 if (id > ushort.MaxValue)
51 throw new ArgumentOutOfRangeException("id", Environment.GetResourceString("ArgumentOutOfRange_NeedValidId", 1, ushort.MaxValue));
59 m_keywords = keywords;
63 throw new ArgumentOutOfRangeException("task", Environment.GetResourceString("ArgumentOutOfRange_NeedNonNegNum"));
66 if (id > ushort.MaxValue)
68 throw new ArgumentOutOfRangeException("task", Environment.GetResourceString("ArgumentOutOfRange_NeedValidId", 1, ushort.MaxValue));
71 m_task = (ushort)task;
122 public override bool Equals(object obj)
124 if (!(obj is EventDescriptor))
127 return Equals((EventDescriptor) obj);
130 public override int GetHashCode()
132 return m_id ^ m_version ^ m_channel ^ m_level ^ m_opcode ^ m_task ^ (int)m_keywords;
135 public bool Equals(EventDescriptor other)
137 if ((m_id != other.m_id) ||
138 (m_version != other.m_version) ||
139 (m_channel != other.m_channel) ||
140 (m_level != other.m_level) ||
141 (m_opcode != other.m_opcode) ||
142 (m_task != other.m_task) ||
143 (m_keywords != other.m_keywords))
150 public static bool operator ==(EventDescriptor event1, EventDescriptor event2)
152 return event1.Equals(event2);
155 public static bool operator !=(EventDescriptor event1, EventDescriptor event2)
157 return !event1.Equals(event2);