working genome on byte strings
[IRC.git] / Robust / src / Benchmarks / SingleTM / Genome / List.java
1 public class List {
2   ListNode head;
3   int size;
4
5   public List () {
6     head = new ListNode();
7     head.dataPtr = null;
8     head.nextPtr = null;
9     size = 0;
10   }
11
12   Pair find (Pair dataPtr) {
13     ListNode nodePtr;
14     ListNode prevPtr = findPrevious(dataPtr);
15
16     nodePtr = prevPtr.nextPtr;
17
18     if ((nodePtr == null) || nodePtr.dataPtr.firstPtr.compareTo(dataPtr.firstPtr) !=0 ) {
19       return null;
20     }
21
22     return nodePtr.dataPtr;
23   }
24
25   ListNode findPrevious (Pair dataPtr) {
26     ListNode prevPtr = head;
27     ListNode nodePtr;
28     nodePtr = prevPtr.nextPtr;
29
30     for (; nodePtr != null; nodePtr = nodePtr.nextPtr) {
31       if (nodePtr.dataPtr.firstPtr.compareTo(dataPtr.firstPtr) >= 0) {
32         return prevPtr;
33       }
34       prevPtr = nodePtr;
35     }
36
37     return prevPtr;
38   }
39
40   boolean insert (Pair dataPtr) {
41     ListNode prevPtr;
42     ListNode nodePtr;
43     ListNode currPtr;
44
45     prevPtr = findPrevious(dataPtr);
46     currPtr = prevPtr.nextPtr;
47
48     if ((currPtr != null) && (currPtr.dataPtr.firstPtr.compareTo(dataPtr.firstPtr)==0)) {
49       return false;
50     }
51
52     nodePtr = new ListNode(dataPtr);
53
54     nodePtr.nextPtr = currPtr;
55     prevPtr.nextPtr = nodePtr;
56     size++;
57
58     return true;
59   }
60 }