* CodeGenerator.cs, ObjectReader.cs, ObjectWriter.cs: Serialize decimals
[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 using System.IO;\r
7 \r
8 namespace Mono.PEToolkit {\r
9 \r
10         /// <summary>\r
11         /// Relative Virtual Address.\r
12         /// </summary>\r
13         public struct RVA {\r
14 \r
15                 public static readonly RVA Null;\r
16 \r
17                 public uint value;\r
18 \r
19                 static RVA()\r
20                 {\r
21                         Null = new RVA(0);\r
22                 }\r
23 \r
24 \r
25                 public RVA(uint val)\r
26                 {\r
27                         value = val;\r
28                 }\r
29 \r
30 \r
31                 public uint Value {\r
32                         get {\r
33                                 return value;\r
34                         }\r
35                         set {\r
36                                 this.value = value;\r
37                         }\r
38                 }\r
39 \r
40                 public void Write (BinaryWriter writer)\r
41                 {\r
42                         writer.Write (value);\r
43                 }\r
44 \r
45                 public static implicit operator RVA (uint val)\r
46                 {\r
47                         return new RVA(val);\r
48                 }\r
49 \r
50                 public static implicit operator uint (RVA rva)\r
51                 {\r
52                         return rva.value;\r
53                 }\r
54 \r
55                 public override int GetHashCode()\r
56                 {\r
57                         return (int) value;\r
58                 }\r
59 \r
60                 public override bool Equals(object o)\r
61                 {\r
62                         bool res = o is RVA;\r
63                         if (res) res = (this.value == ((RVA)o).value);\r
64                         return res;\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.Equals(rva2);\r
75                 }\r
76 \r
77                 public static bool operator < (RVA rva1, RVA rva2)\r
78                 {\r
79                         return (rva1.value < rva2.value);\r
80                 }\r
81 \r
82                 public static bool operator > (RVA rva1, RVA rva2) {\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 bool operator >= (RVA rva1, RVA rva2)\r
92                 {\r
93                         return (rva1.value >= rva2.value);\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                 public static RVA operator - (RVA rva, uint x)\r
102                 {\r
103                         return new RVA (rva.value - x);\r
104                 }\r
105 \r
106 \r
107                 public override string ToString()\r
108                 {\r
109                         if (this == Null) return "NULL";\r
110                         return ("0x" + value.ToString("X"));\r
111                 }\r
112 \r
113                 unsafe public static int Size {\r
114                         get {\r
115                                 return sizeof (uint);\r
116                         }\r
117                 }\r
118 \r
119         }\r
120 \r
121 }\r
122 \r