]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/ObjectUpdateSet.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / ObjectUpdateSet.java
1 package org.simantics.db.impl.query;
2
3 import gnu.trove.procedure.TLongProcedure;
4 import gnu.trove.set.hash.TLongHashSet;
5
6 final public class ObjectUpdateSet {
7
8         private long first = 0;
9         public TLongHashSet rest = new TLongHashSet();
10         
11         public int size() {
12                 if(first != 0) return 1;
13                 else return rest.size();
14         }
15         
16         public long getFirst() {
17                 return first;
18         }
19         
20         public void add(long l) {
21                 if(first == 0) {
22                         if(rest.isEmpty()) {
23                                 first = l;
24                         } else {
25                                 rest.add(l);
26                         }
27                 } else {
28                         if(l == first) return;
29                         rest.add(first);
30                         rest.add(l);
31                         first = 0;
32                 }
33         }
34         
35         public void clear() {
36                 first = 0;
37                 if(!rest.isEmpty()) {
38                         rest = new TLongHashSet();
39                         //System.err.println("new rest!");
40                 }
41                 //rest.clear();
42         }
43         
44         public void forEach(TLongProcedure proc) {
45                 if(first != 0) {
46                         proc.execute(first);
47                 } else {
48                         rest.forEach(proc);
49                 }
50         }
51         
52 }