2002-09-21 Piers Haken <piersh@friskit.com>
[mono.git] / mcs / class / Mono.PEToolkit / RVA.cs
1 /*\r
2  * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>\r
3  */\r
4 \r
5 using System;\r
6 \r
7 namespace Mono.PEToolkit {\r
8 \r
9         /// <summary>\r
10         /// Relative Virtual Address.\r
11         /// </summary>\r
12         public struct RVA {\r
13 \r
14                 public static readonly RVA Null;\r
15 \r
16                 public uint value;\r
17 \r
18                 static RVA()\r
19                 {\r
20                         Null = new RVA(0);\r
21                 }\r
22 \r
23 \r
24                 public RVA(uint val)\r
25                 {\r
26                         value = val;\r
27                 }\r
28 \r
29 \r
30                 public uint Value {\r
31                         get {\r
32                                 return value;\r
33                         }\r
34                         set {\r
35                                 this.value = value;\r
36                         }\r
37                 }\r
38 \r
39 \r
40                 public static implicit operator RVA (uint val)\r
41                 {\r
42                         return new RVA(val);\r
43                 }\r
44 \r
45                 public static implicit operator uint (RVA rva)\r
46                 {\r
47                         return rva.value;\r
48                 }\r
49 \r
50                 public override int GetHashCode()\r
51                 {\r
52                         return (int) value;\r
53                 }\r
54 \r
55                 public override bool Equals(object o)\r
56                 {\r
57                         bool res = o is RVA;\r
58                         if (res) res = (this.value == ((RVA)o).value);\r
59                         return res;\r
60                 }\r
61 \r
62                 public static bool operator == (RVA rva1, RVA rva2)\r
63                 {\r
64                         return rva1.Equals(rva2);\r
65                 }\r
66 \r
67                 public static bool operator != (RVA rva1, RVA rva2)\r
68                 {\r
69                         return !rva1.Equals(rva2);\r
70                 }\r
71 \r
72                 public static bool operator < (RVA rva1, RVA rva2)\r
73                 {\r
74                         return (rva1.value < rva2.value);\r
75                 }\r
76 \r
77                 public static bool operator > (RVA rva1, RVA rva2) {\r
78                         return (rva1.value > rva2.value);\r
79                 }\r
80 \r
81                 public static bool operator <= (RVA rva1, RVA rva2)\r
82                 {\r
83                         return (rva1.value <= rva2.value);\r
84                 }\r
85 \r
86                 public static bool operator >= (RVA rva1, RVA rva2)\r
87                 {\r
88                         return (rva1.value >= rva2.value);\r
89                 }\r
90 \r
91                 public static RVA operator + (RVA rva, uint x)\r
92                 {\r
93                         return new RVA (rva.value + x);\r
94                 }\r
95 \r
96                 public static RVA operator - (RVA rva, uint x)\r
97                 {\r
98                         return new RVA (rva.value - x);\r
99                 }\r
100 \r
101 \r
102                 public override string ToString()\r
103                 {\r
104                         if (this == Null) return "NULL";\r
105                         return ("0x" + value.ToString("X"));\r
106                 }\r
107 \r
108                 unsafe public static int Size {\r
109                         get {\r
110                                 return sizeof (uint);\r
111                         }\r
112                 }\r
113 \r
114         }\r
115 \r
116 }\r
117 \r