* CodeGenerator.cs, ObjectReader.cs, ObjectWriter.cs: Serialize decimals
[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.IO;\r
7 using System.Runtime.InteropServices;\r
8 \r
9 namespace Mono.PEToolkit {\r
10 \r
11         /// <summary>\r
12         /// IMAGE_DATA_DIRECTORY.\r
13         /// </summary>\r
14         public class 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 = new DataDir ();\r
24                         Null.virtAddr = 0;\r
25                         Null.size = 0;\r
26                 }\r
27 \r
28                 public DataDir () {\r
29 \r
30                 }\r
31 \r
32                 public DataDir (BinaryReader reader)\r
33                 {\r
34                         Read (reader);\r
35                 }\r
36 \r
37                 public void Read (BinaryReader reader)\r
38                 {\r
39                         virtAddr = new RVA (reader.ReadUInt32 ());\r
40                         size = reader.ReadUInt32 ();\r
41                 }\r
42 \r
43                 public void Write (BinaryWriter writer)\r
44                 {\r
45                         virtAddr.Write (writer);\r
46                         writer.Write (size);\r
47                 }\r
48 \r
49                 public RVA VirtualAddress {\r
50                         get {\r
51                                 return virtAddr;\r
52                         }\r
53                         set {\r
54                                 virtAddr = value;\r
55                         }\r
56                 }\r
57 \r
58                 public uint Size {\r
59                         get {\r
60                                 return size;\r
61                         }\r
62                         set {\r
63                                 size = value;\r
64                         }\r
65                 }\r
66 \r
67                 public bool IsNull {\r
68                         get {\r
69                                 return (this == Null);\r
70                         }\r
71                 }\r
72 \r
73                 public override int GetHashCode()\r
74                 {\r
75                         return (virtAddr.GetHashCode() ^ (int)(size << 1));\r
76                 }\r
77 \r
78                 public override bool Equals(object obj)\r
79                 {\r
80                         bool res = (obj is DataDir);\r
81                         if (res) {\r
82                                 DataDir that = (DataDir) obj;\r
83                                 res = (this.virtAddr == that.virtAddr) &&\r
84                                       (this.size == that.size);\r
85                         }\r
86                         return res;\r
87                 }\r
88 \r
89                 public static bool operator == (DataDir d1, DataDir d2)\r
90                 {\r
91                         return d1.Equals(d2);\r
92                 }\r
93 \r
94                 public static bool operator != (DataDir d1, DataDir d2)\r
95                 {\r
96                         return !d1.Equals(d2);\r
97                 }\r
98 \r
99                 /// <summary>\r
100                 /// </summary>\r
101                 /// <returns></returns>\r
102                 public override string ToString()\r
103                 {\r
104                         if (this.IsNull) return "NULL";\r
105                         return String.Format("RVA = {0}, size = 0x{1}", virtAddr, size.ToString("X"));\r
106                 }\r
107 \r
108         }\r
109 \r
110 }\r
111 \r