# HG changeset patch # User Sascha L. Teichmann # Date 1301303190 0 # Node ID 764835268e2b104ad345a22c9f0b8f2970bd035d # Parent bfee0e05b4e78a1efcdc92a4456526e8b108535c Added methods to find out if two ranges intersects. flys-backend/trunk@1579 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r bfee0e05b4e7 -r 764835268e2b flys-backend/ChangeLog --- a/flys-backend/ChangeLog Thu Mar 24 16:47:05 2011 +0000 +++ b/flys-backend/ChangeLog Mon Mar 28 09:06:30 2011 +0000 @@ -1,3 +1,8 @@ +2011-03-28 Sascha L. Teichmann + + * src/main/java/de/intevation/flys/model/Range.java: + Added methods to find out if two ranges intersects. + 2011-03-24 Sascha L. Teichmann * src/main/java/de/intevation/flys/model/Gauge.java: diff -r bfee0e05b4e7 -r 764835268e2b flys-backend/src/main/java/de/intevation/flys/model/Range.java --- a/flys-backend/src/main/java/de/intevation/flys/model/Range.java Thu Mar 24 16:47:05 2011 +0000 +++ b/flys-backend/src/main/java/de/intevation/flys/model/Range.java Mon Mar 28 09:06:30 2011 +0000 @@ -28,6 +28,10 @@ public Range() { } + public Range(double a, double b, River river) { + this(new BigDecimal(a), new BigDecimal(b), river); + } + public Range(BigDecimal a, BigDecimal b, River river) { this.a = a; this.b = b; @@ -78,5 +82,63 @@ public void setRiver(River river) { this.river = river; } + + public int code() { + int code = 0; + if (a != null) code = 1; + if (b != null) code |= 2; + return code; + } + + public boolean intersects(BigDecimal c) { + return !(a.compareTo(c) > 0 || b.compareTo(c) < 0); + } + + public boolean intersects(Range other) { + + int code = code(); + int ocode = other.code(); + + if (code == 0 || ocode == 0) { + return false; + } + + switch (code) { + case 1: // has a + switch (ocode) { + case 1: // has a + return a.compareTo(other.a) == 0; + case 2: // has b + return a.compareTo(other.b) == 0; + case 3: // has range + return other.intersects(a); + } + break; + case 2: // has b + switch (ocode) { + case 1: // has a + return b.compareTo(other.a) == 0; + case 2: // has b + return a.compareTo(other.b) == 0; + case 3: // has range + return other.intersects(b); + } + break; + case 3: // has range + switch (ocode) { + case 1: // has a + return intersects(other.a); + case 2: // has b + return intersects(other.b); + case 3: // has range + return !(other.b.compareTo(a) < 0 + ||other.a.compareTo(b) > 0); + } + break; + + } + + return false; + } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :