Mercurial > dive4elements > river
comparison flys-backend/src/main/java/de/intevation/flys/model/Range.java @ 204:764835268e2b
Added methods to find out if two ranges intersects.
flys-backend/trunk@1579 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Sascha L. Teichmann <sascha.teichmann@intevation.de> |
---|---|
date | Mon, 28 Mar 2011 09:06:30 +0000 |
parents | 3169b559ca3c |
children | 697d1faa8217 |
comparison
equal
deleted
inserted
replaced
203:bfee0e05b4e7 | 204:764835268e2b |
---|---|
24 private BigDecimal b; | 24 private BigDecimal b; |
25 | 25 |
26 private River river; | 26 private River river; |
27 | 27 |
28 public Range() { | 28 public Range() { |
29 } | |
30 | |
31 public Range(double a, double b, River river) { | |
32 this(new BigDecimal(a), new BigDecimal(b), river); | |
29 } | 33 } |
30 | 34 |
31 public Range(BigDecimal a, BigDecimal b, River river) { | 35 public Range(BigDecimal a, BigDecimal b, River river) { |
32 this.a = a; | 36 this.a = a; |
33 this.b = b; | 37 this.b = b; |
76 } | 80 } |
77 | 81 |
78 public void setRiver(River river) { | 82 public void setRiver(River river) { |
79 this.river = river; | 83 this.river = river; |
80 } | 84 } |
85 | |
86 public int code() { | |
87 int code = 0; | |
88 if (a != null) code = 1; | |
89 if (b != null) code |= 2; | |
90 return code; | |
91 } | |
92 | |
93 public boolean intersects(BigDecimal c) { | |
94 return !(a.compareTo(c) > 0 || b.compareTo(c) < 0); | |
95 } | |
96 | |
97 public boolean intersects(Range other) { | |
98 | |
99 int code = code(); | |
100 int ocode = other.code(); | |
101 | |
102 if (code == 0 || ocode == 0) { | |
103 return false; | |
104 } | |
105 | |
106 switch (code) { | |
107 case 1: // has a | |
108 switch (ocode) { | |
109 case 1: // has a | |
110 return a.compareTo(other.a) == 0; | |
111 case 2: // has b | |
112 return a.compareTo(other.b) == 0; | |
113 case 3: // has range | |
114 return other.intersects(a); | |
115 } | |
116 break; | |
117 case 2: // has b | |
118 switch (ocode) { | |
119 case 1: // has a | |
120 return b.compareTo(other.a) == 0; | |
121 case 2: // has b | |
122 return a.compareTo(other.b) == 0; | |
123 case 3: // has range | |
124 return other.intersects(b); | |
125 } | |
126 break; | |
127 case 3: // has range | |
128 switch (ocode) { | |
129 case 1: // has a | |
130 return intersects(other.a); | |
131 case 2: // has b | |
132 return intersects(other.b); | |
133 case 3: // has range | |
134 return !(other.b.compareTo(a) < 0 | |
135 ||other.a.compareTo(b) > 0); | |
136 } | |
137 break; | |
138 | |
139 } | |
140 | |
141 return false; | |
142 } | |
81 } | 143 } |
82 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : | 144 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 : |