2002-07-10 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[mono.git] / mcs / class / corlib / System / OperatingSystem.cs
1 //------------------------------------------------------------------------------\r
2 // \r
3 // System.OperatingSystem.cs \r
4 //\r
5 // Copyright (C) 2001 Moonlight Enterprises, All Rights Reserved\r
6 // \r
7 // Author:         Jim Richardson, develop@wtfo-guru.com\r
8 // Created:        Saturday, August 11, 2001 \r
9 //\r
10 //------------------------------------------------------------------------------\r
11 \r
12 using System;\r
13 using System.Globalization;\r
14 \r
15 namespace System\r
16 {\r
17         /// <summary>\r
18         /// Class representing a specific operating system version for a specific platform\r
19         /// </summary>\r
20         [Serializable]\r
21         public sealed class OperatingSystem : ICloneable\r
22         {\r
23                 private System.PlatformID itsPlatform;\r
24                 private Version itsVersion;\r
25 \r
26                 public OperatingSystem(PlatformID platform, Version version)\r
27                 {\r
28                         if(version == null)\r
29                         {\r
30                                 throw new ArgumentNullException();\r
31                         }\r
32                         \r
33                         itsPlatform = platform;\r
34                         itsVersion = version;\r
35                 }\r
36 \r
37                 /// <summary>\r
38                 /// Get the PlatformID\r
39                 /// </summary>\r
40                 public PlatformID Platform\r
41                 {\r
42                         get\r
43                         {\r
44                                 return itsPlatform;\r
45                         }\r
46                 }\r
47 \r
48                 /// <summary>\r
49                 /// Gets the version object\r
50                 /// </summary>\r
51                 public Version Version\r
52                 {\r
53                         get\r
54                         {\r
55                                 return itsVersion;\r
56                         }\r
57                 }\r
58 \r
59                 /// <summary>\r
60                 /// Return a clone of this object\r
61                 /// </summary>\r
62                 public object Clone()\r
63                 {\r
64                         return new OperatingSystem(itsPlatform, itsVersion);\r
65                 }\r
66 \r
67                 /// <summary>\r
68                 /// Return true if obj equals this object\r
69                 /// </summary>\r
70                 public override bool Equals(object obj)\r
71                 {\r
72                         //Check for null and compare run-time types.\r
73                         if (obj == null || GetType() != obj.GetType()) return false;\r
74                         OperatingSystem os = (OperatingSystem)obj;\r
75                         return (itsPlatform == os.itsPlatform) && \r
76                                 (os.itsVersion.Equals(itsVersion));\r
77                 }\r
78 \r
79                 /// <summary>\r
80                 /// Return hash code\r
81                 /// </summary>\r
82                 public override int GetHashCode()\r
83                 {       // this leave us enuf for 256 unique platforms which should suffice for a good while\r
84                         return ((int)itsPlatform << 24) | itsVersion.GetHashCode() >> 8;\r
85                 }\r
86 \r
87                 /// <summary>\r
88                 /// Return a string reprentation of this instance\r
89                 /// </summary>\r
90                 public override string ToString()\r
91                 {\r
92                         string str;\r
93                         \r
94                         switch(itsPlatform)\r
95                         {\r
96                         case System.PlatformID.Win32NT: str = "Microsoft Windows NT"; break;\r
97                         case System.PlatformID.Win32S: str = "Microsoft Win32S";  break;\r
98                         case System.PlatformID.Win32Windows: str = "Microsoft Windows 98"; break;\r
99                         case System.PlatformID.Unix: str = "Unix"; break;\r
100                         default: str = Locale.GetText ("<unknown>"); break;\r
101                         }\r
102 \r
103                         return str + " " + itsVersion.ToString();\r
104                 }\r
105         }\r
106 }\r