+++ /dev/null
-using System;\r
-using System.Collections.Generic;\r
-using System.Text;\r
-\r
-namespace DTXMania\r
-{\r
- /// <summary>\r
- /// <para>DTXMania のバージョン。</para>\r
- /// <para>例1:"078b" → 整数部=078, 小数部=2000000 ('英字'+'yymmdd') </para>\r
- /// <para>例2:"078a(100124)" → 整数部=078, 小数部=1100124 ('英字'+'yymmdd')</para>\r
- /// </summary>\r
- public class CDTXVersion\r
- {\r
- // プロパティ\r
-\r
- /// <summary>\r
- /// <para>バージョンが未知のときに true になる。</para>\r
- /// </summary>\r
- public bool Unknown\r
- {\r
- get;\r
- private set;\r
- }\r
-\r
- /// <summary>\r
- /// <para>DTXMania のバージョンの整数部を表す。</para>\r
- /// <para>例1:"078b" → 整数部=078</para>\r
- /// <para>例2:"078a(100124)" → 整数部=078</para>\r
- /// </summary>\r
- public int n整数部;\r
-\r
- /// <summary>\r
- /// <para>DTXMania のバージョンの小数部を表す。</para>\r
- /// <para>小数部は、'英字(0~26) * 1000000 + 日付(yymmdd)' の式で表される整数。</para>\r
- /// <para>例1:"078b" → 小数部=2000000 </para>\r
- /// <para>例2:"078a(100124)" → 小数部=1100124</para>\r
- /// </summary>\r
- public int n小数部;\r
-\r
-\r
- // コンストラクタ\r
-\r
- public CDTXVersion()\r
- {\r
- this.n整数部 = 0;\r
- this.n小数部 = 0;\r
- this.Unknown = true;\r
- }\r
- public CDTXVersion(int n整数部)\r
- {\r
- this.n整数部 = n整数部;\r
- this.n小数部 = 0;\r
- this.Unknown = false;\r
- }\r
- public CDTXVersion(string Version)\r
- {\r
- this.n整数部 = 0;\r
- this.n小数部 = 0;\r
- this.Unknown = true;\r
-\r
- if (Version.ToLower().Equals("unknown"))\r
- {\r
- this.Unknown = true;\r
- }\r
- else\r
- {\r
- int num = 0;\r
- int length = Version.Length;\r
- if ((num < length) && char.IsDigit(Version[num]))\r
- {\r
- // 整数部 取得\r
- while ((num < length) && char.IsDigit(Version[num]))\r
- {\r
- this.n整数部 = (this.n整数部 * 10) + CDTXVersion.DIG10.IndexOf(Version[num++]);\r
- }\r
-\r
- // 小数部(1)英字部分 取得\r
- while ((num < length) && ((Version[num] == ' ') || (Version[num] == '(')))\r
- {\r
- num++;\r
- }\r
- if ((num < length) && (CDTXVersion.DIG36.IndexOf(Version[num]) >= 10))\r
- {\r
- this.n小数部 = CDTXVersion.DIG36.IndexOf(Version[num++]) - 10;\r
- if (this.n小数部 >= 0x1a)\r
- {\r
- this.n小数部 -= 0x1a;\r
- }\r
- this.n小数部++;\r
- }\r
-\r
- // 小数部(2)日付部分(yymmdd) 取得\r
- while ((num < length) && ((Version[num] == ' ') || (Version[num] == '(')))\r
- {\r
- num++;\r
- }\r
- for (int i = 0; i < 6; i++)\r
- {\r
- this.n小数部 *= 10;\r
- if ((num < length) && char.IsDigit(Version[num]))\r
- {\r
- this.n小数部 += CDTXVersion.DIG10.IndexOf(Version[num]);\r
- }\r
- num++;\r
- }\r
- this.Unknown = false;\r
- }\r
- else\r
- {\r
- this.Unknown = true;\r
- }\r
- }\r
- }\r
- public CDTXVersion(int n整数部, int n小数部)\r
- {\r
- this.n整数部 = n整数部;\r
- this.n小数部 = n小数部;\r
- this.Unknown = false;\r
- }\r
-\r
-\r
- // メソッド\r
-\r
- public string toString()\r
- {\r
- var result = new StringBuilder(32);\r
-\r
- // 整数部\r
- result.Append(this.n整数部.ToString("000"));\r
-\r
- // 英字部分(あれば)\r
- if (this.n小数部 >= 1000000)\r
- {\r
- int n英字 = Math.Min(this.n小数部 / 1000000, 26); // 1~26\r
- result.Append(CDTXVersion.DIG36[10 + (n英字 - 1)]);\r
- }\r
-\r
- // 日付部分(あれば)\r
- int n日付 = this.n小数部 % 1000000;\r
- if (n日付 > 0)\r
- {\r
- result.Append('(');\r
- result.Append(n日付.ToString("000000"));\r
- result.Append(')');\r
- }\r
-\r
- return result.ToString();\r
- }\r
-\r
- public static bool operator ==(CDTXVersion x, CDTXVersion y)\r
- {\r
- return (((x.n整数部 == y.n整数部) && (x.n小数部 == y.n小数部)) && (x.Unknown == y.Unknown));\r
- }\r
- public static bool operator >(CDTXVersion x, CDTXVersion y)\r
- {\r
- return ((x.n整数部 > y.n整数部) || ((x.n整数部 == y.n整数部) && (x.n小数部 > y.n小数部)));\r
- }\r
- public static bool operator >=(CDTXVersion x, CDTXVersion y)\r
- {\r
- return ((x.n整数部 > y.n整数部) || ((x.n整数部 == y.n整数部) && (x.n小数部 >= y.n小数部)));\r
- }\r
- public static bool operator !=(CDTXVersion x, CDTXVersion y)\r
- {\r
- if ((x.n整数部 == y.n整数部) && (x.n小数部 == y.n小数部))\r
- {\r
- return (x.Unknown != y.Unknown);\r
- }\r
- return true;\r
- }\r
- public static bool operator <(CDTXVersion x, CDTXVersion y)\r
- {\r
- return ((x.n整数部 < y.n整数部) || ((x.n整数部 == y.n整数部) && (x.n小数部 < y.n小数部)));\r
- }\r
- public static bool operator <=(CDTXVersion x, CDTXVersion y)\r
- {\r
- return ((x.n整数部 < y.n整数部) || ((x.n整数部 == y.n整数部) && (x.n小数部 <= y.n小数部)));\r
- }\r
- public override bool Equals(object obj) // 2011.1.3 yyagi: warningを無くすために追加\r
- {\r
- if (obj == null)\r
- {\r
- return false;\r
- }\r
- if (this.GetType() != obj.GetType())\r
- {\r
- return false;\r
- }\r
- CDTXVersion objCDTXVersion = (CDTXVersion)obj;\r
- if (!int.Equals(this.n整数部, objCDTXVersion.n整数部) || !int.Equals(this.n小数部, objCDTXVersion.n小数部))\r
- {\r
- return false;\r
- }\r
- return true;\r
- }\r
- public override int GetHashCode() // 2011.1.3 yyagi: warningを無くすために追加\r
- {\r
- string v = this.toString();\r
- return v.GetHashCode();\r
- }\r
-\r
- // その他\r
-\r
- #region [ private ]\r
- //-----------------\r
- private const string DIG36 = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";\r
- private const string DIG10 = "0123456789";\r
- //-----------------\r
- #endregion\r
- }\r
-}\r