1 using System;
2 
3 
4 namespace Microsoft.Build.Framework
5 {
6 	[Serializable]
7 	public class BuildEventContext
8 	{
9 		static readonly Random rnd = new Random ();
10 
11 		public static BuildEventContext Invalid = new BuildEventContext (
12 			InvalidSubmissionId,
13 			InvalidNodeId,
14 			InvalidProjectInstanceId,
15 			InvalidTargetId,
16 			InvalidProjectContextId,
17 			InvalidTaskId);
18 
NewInstance()19 		internal static BuildEventContext NewInstance ()
20 		{
21 			return new BuildEventContext (rnd.Next (), rnd.Next (), rnd.Next (), rnd.Next ());
22 		}
23 
BuildEventContext(int nodeId, int targetId, int projectContextId, int taskId)24 		public BuildEventContext (int nodeId, int targetId, int projectContextId, int taskId)
25 			: this (nodeId, rnd.Next (), targetId, projectContextId, taskId)
26 		{
27 		}
28 
BuildEventContext(int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId)29 		public BuildEventContext (int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId)
30 			: this (rnd.Next (), nodeId, projectInstanceId, projectContextId, targetId, taskId)
31 		{
32 		}
33 
BuildEventContext(int submissionId, int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId)34 		public BuildEventContext (int submissionId, int nodeId, int projectInstanceId, int projectContextId, int targetId, int taskId)
35 		{
36 			SubmissionId = submissionId;
37 			NodeId = nodeId;
38 			ProjectInstanceId = projectInstanceId;
39 			TargetId = targetId;
40 			ProjectContextId = projectContextId;
41 			TaskId = taskId;
42 		}
43 
44 		public const int InvalidSubmissionId = -1;
45 		public const int InvalidNodeId = -2;
46 		public const int InvalidProjectInstanceId = -1;
47 		public const int InvalidTargetId = -1;
48 		public const int InvalidProjectContextId = -2;
49 		public const int InvalidTaskId = -1;
50 
51 		public int SubmissionId { get; private set; }
52 		public int NodeId { get; private set; }
53 		public int ProjectInstanceId { get; private set; }
54 		public int TargetId { get; private set; }
55 		public int ProjectContextId { get; private set; }
56 		public int TaskId { get; private set; }
57 
58 		// MSDN document says "true if the references are equal, false otherwise." but that doesn't make sense.
Equals(object obj)59 		public override bool Equals (object obj)
60 		{
61 			var o = obj as BuildEventContext;
62 			return (object) o != null &&
63 				o.NodeId == NodeId &&
64 				o.ProjectContextId == ProjectContextId &&
65 				o.ProjectInstanceId == ProjectInstanceId &&
66 				o.SubmissionId == SubmissionId &&
67 				o.TargetId == TargetId &&
68 				o.TaskId == TaskId;
69 		}
70 
GetHashCode()71 		public override int GetHashCode ()
72 		{
73 			return
74 				(NodeId << 5) +
75 				(ProjectContextId << 4) +
76 				(ProjectInstanceId << 3) +
77 				(SubmissionId << 2) +
78 				(TargetId << 1) +
79 				TaskId;
80 		}
81 
operator ==(BuildEventContext left, BuildEventContext right)82 		public static bool operator == (BuildEventContext left, BuildEventContext right)
83 		{
84 			return (object) left == null ? (object)right == null : left.Equals (right);
85 		}
86 
operator !=(BuildEventContext left, BuildEventContext right)87 		public static bool operator != (BuildEventContext left, BuildEventContext right)
88 		{
89 			return (object) left == null ? (object)right != null : !left.Equals (right);
90 		}
91 	}
92 }
93 
94 
95