2003-01-13 Ville Palo <vi64pa@koti.soon.fi>
[mono.git] / mcs / class / Mono.PEToolkit / DataDir.cs
1 /*\r
2  * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>\r
3  */\r
4 \r
5 using System;\r
6 using System.Runtime.InteropServices;\r
7 \r
8 namespace Mono.PEToolkit {\r
9 \r
10         /// <summary>\r
11         /// IMAGE_DATA_DIRECTORY.\r
12         /// </summary>\r
13         [StructLayoutAttribute(LayoutKind.Sequential)]\r
14         public struct DataDir {\r
15 \r
16                 public static readonly DataDir Null;\r
17 \r
18                 public RVA virtAddr;\r
19                 public uint size;\r
20 \r
21                 static DataDir ()\r
22                 {\r
23                         Null.virtAddr = 0;\r
24                         Null.size = 0;\r
25                 }\r
26 \r
27 \r
28                 public RVA VirtualAddress {\r
29                         get {\r
30                                 return virtAddr;\r
31                         }\r
32                         set {\r
33                                 virtAddr = value;\r
34                         }\r
35                 }\r
36 \r
37                 public uint Size {\r
38                         get {\r
39                                 return size;\r
40                         }\r
41                         set {\r
42                                 size = value;\r
43                         }\r
44                 }\r
45 \r
46                 public bool IsNull {\r
47                         get {\r
48                                 return (this == Null);\r
49                         }\r
50                 }\r
51 \r
52                 public override int GetHashCode()\r
53                 {\r
54                         return (virtAddr.GetHashCode() ^ (int)(size << 1));\r
55                 }\r
56 \r
57                 public override bool Equals(object obj)\r
58                 {\r
59                         bool res = (obj is DataDir);\r
60                         if (res) {\r
61                                 DataDir that = (DataDir) obj;\r
62                                 res = (this.virtAddr == that.virtAddr) &&\r
63                                       (this.size == that.size);\r
64                         }\r
65                         return res;\r
66                 }\r
67 \r
68                 public static bool operator == (DataDir d1, DataDir d2)\r
69                 {\r
70                         return d1.Equals(d2);\r
71                 }\r
72 \r
73                 public static bool operator != (DataDir d1, DataDir d2)\r
74                 {\r
75                         return !d1.Equals(d2);\r
76                 }\r
77 \r
78                 /// <summary>\r
79                 /// </summary>\r
80                 /// <returns></returns>\r
81                 public override string ToString()\r
82                 {\r
83                         if (this.IsNull) return "NULL";\r
84                         return String.Format("RVA = {0}, size = 0x{1}", virtAddr, size.ToString("X"));\r
85                 }\r
86 \r
87         }\r
88 \r
89 }\r
90 \r