Added
[IRC.git] / Robust / Transactions / jcarderbenchmarks / mysrc / TransactionalIO / Utilities / Range.java
1 /*
2  * To change this template, choose Tools | Templates
3  * and open the template in the editor.
4  */
5 package TransactionalIO.Utilities;
6
7
8 /**
9  *
10  * @author navid
11  */
12 public class Range implements Comparable {
13
14     private long start;
15     private long end;
16
17     public Range() {
18     }
19
20     public Range(long start, long end) {
21         this.start = start;
22         this.end = end;
23     }
24
25     public long getEnd() {
26         return end;
27     }
28
29     public void setEnd(long end) {
30         this.end = end;
31     }
32
33     public long getStart() {
34         return start;
35     }
36
37     public void setStart(long start) {
38         this.start = start;
39     }
40
41     public Range intersection(Range secondrange) {
42         if ((secondrange.start <= this.start) && (this.start <= secondrange.end)) {
43             return new Range(this.start, Math.min(this.end, secondrange.end));
44         } else if ((secondrange.start <= this.end) && (this.end <= secondrange.end)) {
45             return new Range(Math.max(this.start, secondrange.start), this.end);
46         } else if ((this.start <= secondrange.start) && (secondrange.end <= this.end)) {
47             return new Range(secondrange.start, secondrange.end);
48         } else {
49             return null;
50         }
51     }
52
53     public boolean hasIntersection(Range secondrange) {
54         if ((secondrange.start <= this.start) && (this.start <= secondrange.end)) {
55             return true;
56         } else if ((secondrange.start <= this.end) && (this.end <= secondrange.end)) {
57             return true;
58         } else if ((this.start <= secondrange.start) && (secondrange.end <= this.end)) {
59             return true;
60         } else {
61             return false;
62         }
63     }
64     
65
66     public boolean includes(Range secondrange) {
67         if (this.start <= secondrange.start && secondrange.end <= this.end) {
68             return true;
69         } else {
70             return false;
71         }
72     }
73
74     public Range[] minus(Range[] intersectedranges, int size) {
75         Range[] tmp = new Range[size + 1];
76         
77         int counter = 0;
78         if (this.start < intersectedranges[0].start) {
79             tmp[counter] = new Range(this.start, intersectedranges[0].start);
80             counter++;
81         }
82         for (int i = 1; i < size; i++) {
83             tmp[counter] = new Range(intersectedranges[i - 1].end, intersectedranges[i].start);
84             counter++;
85         }
86         if (this.end > intersectedranges[size - 1].end) {
87             tmp[counter] = new Range(intersectedranges[size - 1].end, this.end);
88             counter++;
89         }
90         Range[] result = new Range[counter];
91         for (int i = 0; i < counter; i++) {
92             result[i] = tmp[i];
93         }
94         return result;
95     }
96
97     public int compareTo(Object arg0) {
98
99         Range tmp = (Range) arg0;
100         if (this.start < tmp.start) {
101             return -1;
102         } else if (this.start == tmp.start) {
103             return 0;
104         } else {
105             return 1;
106         }
107     }
108 }