-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLinkedList.cmtjava
144 lines (124 loc) · 3.1 KB
/
LinkedList.cmtjava
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
package test.VACATION;
import stm.*;
public class LinkedList extends TLinkedList{
public static STM<Reservation_Info> returnReservationInfo(Reservation_Info reser)
{
return STMRTS.stmReturn(reser);
}
public STM<Boolean> insert(Reservation_Info obj){
return new STMDO{
Node head <- this.getHead();
Node node <- STMRTS.stmReturn (new Node(obj, head, null));
this.setHead(node);
Integer lsize <- this.getSize();
Integer price <- obj.getPrice();
Integer bill <- this.getBill();
this.setBill(bill+price);
this.setSize(lsize+1);
if(lsize.equals(0)){
this.setHead(node);
STMRTS.stmReturn(true)
}else{
node.setNext(head);
head.setPrevious(node);
STMRTS.stmReturn(true)
}
};
}
public STM<Reservation_Info> find(Reservation_Info obj){
return new STMDO{
Node node <- this.getHead();
Integer obj_id <- obj.getId();
Integer obj_type <- obj.getType();
find(node, obj_id, obj_type)
};
}
public STM<Reservation_Info> find(Node node, Integer obj_id, Integer obj_type){
return new STMDO{
if(node==null){
returnReservationInfo(null)
}else{
Reservation_Info reser <- node.getElement();
Integer node_id <- reser.getId();
Integer node_type <- reser.getType();
if((obj_id==node_id)&&(obj_type==node_type)){
returnReservationInfo(reser)
}else{
Node next <- node.getNext();
if(next==null){
returnReservationInfo(null)
}else{
Reservation_Info new_aux_reservation_info <- next.getElement();
find(next, obj_id, obj_type)
}
}
}
};
}
public STM<Boolean> remove(Reservation_Info obj){
return new STMDO{
Node node <- this.getHead();
Integer obj_id <- obj.getId();
Integer obj_type <- obj.getType();
remove(node, obj_id, obj_type)
};
}
public STM<Boolean> remove(Node node, Integer obj_id, Integer obj_type) {
return new STMDO{
if(node==null){
STMRTS.stmReturn(false)
}
else{
Reservation_Info reser <- node.getElement();
Integer node_id <- reser.getId();
Integer node_type <- reser.getType();
if((obj_id==node_id) && (obj_type==node_type)){
this.remove(node);
STMRTS.stmReturn(true)
}
else{
Node next <- node.getNext();
if(next==null){
STMRTS.stmReturn(false)
}
else{
Reservation_Info new_aux_reservation_info <- next.getElement();
remove(next, obj_id, obj_type)
}
}
}
};
}
public STM<stm.Void> remove(Node node){
return new STMDO{
Integer lsize <- this.getSize();
this.setSize(lsize-1);
Reservation_Info reser <- node.getElement();
Integer price <- reser.getPrice();
Integer bill <- this.getBill();
this.setBill(bill-price);
if(lsize==1){
this.setHead(null)
}
else
{
Node previous <- node.getPrevious();
if(previous == null){
Node next_aux <- node.getNext();
this.setHead(next_aux)
}
else{
Node next <- node.getNext();
if(next==null){
Node previous_aux <- node.getPrevious();
previous_aux.setNext(null)
}
else{
previous.setNext(next);
next.setPrevious(previous)
}
}
}
};
}
}