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 :

http://dive4elements.wald.intevation.org