OSDN Git Service

無条件先制対潜可能艦にFletcherとJanus改を加える
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / Model / Range.cs
1 // Copyright (C) 2019 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
2 //\r
3 // Licensed under the Apache License, Version 2.0 (the "License");\r
4 // you may not use this file except in compliance with the License.\r
5 // You may obtain a copy of the License at\r
6 //\r
7 //    http://www.apache.org/licenses/LICENSE-2.0\r
8 //\r
9 // Unless required by applicable law or agreed to in writing, software\r
10 // distributed under the License is distributed on an "AS IS" BASIS,\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
12 // See the License for the specific language governing permissions and\r
13 // limitations under the License.\r
14 \r
15 using System;\r
16 \r
17 namespace KancolleSniffer.Model\r
18 {\r
19     public struct Range\r
20     {\r
21         public int Min { get; }\r
22         public int Max { get; }\r
23 \r
24         public Range(int min, int max)\r
25         {\r
26             if (max < min)\r
27                 throw new ArgumentException();\r
28             Min = min;\r
29             Max = max;\r
30         }\r
31 \r
32         public Range(double min, double max)\r
33         {\r
34             if (max < min)\r
35                 throw new ArgumentException();\r
36             Min = (int)min;\r
37             Max = (int)max;\r
38         }\r
39 \r
40         public Range(double base_, RangeD range)\r
41         {\r
42             Min = (int)(base_ + range.Min);\r
43             Max = (int)(base_ + range.Max);\r
44         }\r
45 \r
46         public static Range operator +(Range lhs, Range rhs)\r
47         {\r
48             return new Range(lhs.Min + rhs.Min, lhs.Max + rhs.Max);\r
49         }\r
50 \r
51         public override bool Equals(object other)\r
52         {\r
53             if (!(other is Range range))\r
54                 return false;\r
55             return Max == range.Max && Min == range.Min;\r
56         }\r
57 \r
58         public override int GetHashCode()\r
59         {\r
60             return 0;\r
61         }\r
62 \r
63         public static bool operator ==(Range lhs, Range rhs)\r
64         {\r
65             return lhs.Equals(rhs);\r
66         }\r
67 \r
68         public static bool operator !=(Range lhs, Range rhs)\r
69         {\r
70             return !(lhs == rhs);\r
71         }\r
72 \r
73         public bool Diff => Min != Max;\r
74 \r
75         public string RangeString => $"{Min}~{Max}";\r
76     }\r
77 \r
78     public struct RangeD\r
79     {\r
80         public double Min { get; }\r
81         public double Max { get; }\r
82 \r
83         public RangeD(double min, double max)\r
84         {\r
85             if (max < min)\r
86                 throw new ArgumentException();\r
87             Min = min;\r
88             Max = max;\r
89         }\r
90 \r
91         public RangeD Sqrt() => new RangeD(Math.Sqrt(Min), Math.Sqrt(Max));\r
92 \r
93         public static RangeD operator +(RangeD lhs, double rhs)\r
94         {\r
95             return new RangeD(lhs.Min + rhs, lhs.Max + rhs);\r
96         }\r
97 \r
98         public static explicit operator Range(RangeD range)\r
99         {\r
100             return new Range((int)range.Min, (int)range.Max);\r
101         }\r
102     }\r
103 }