1 package fi.vtt.simantics.procore.internal;
\r
3 import gnu.trove.set.hash.THashSet;
\r
5 import java.util.Collection;
\r
6 import java.util.LinkedList;
\r
8 public class ClusterChangeManager {
\r
10 final private THashSet<ClusterChange> clusterChanges = new THashSet<ClusterChange>();
\r
11 final private LinkedList<ClusterChange> removeList = new LinkedList<ClusterChange>();
\r
12 private int changeCounter = 0;
\r
13 private int byteLimit = 65536;
\r
15 public void checkFlush() {
\r
16 if(changeCounter < 50) return;
\r
17 ClusterChange test = removeList.poll();
\r
18 if(test == null) return;
\r
19 if(test.byteIndex > byteLimit) {
\r
20 test.flushCollect(null);
\r
22 removeList.add(test);
\r
26 public void updateChangeCounters() {
\r
27 changeCounter = clusterChanges.size();
\r
28 byteLimit = (100-changeCounter)*ClusterChange.MAX_FIXED_BYTES;
\r
31 void addChange(ClusterChange change) {
\r
32 clusterChanges.add(change);
\r
33 updateChangeCounters();
\r
36 Collection<ClusterChange> get() {
\r
37 return clusterChanges;
\r
40 void add(ClusterChange change) {
\r
41 if(clusterChanges.add(change)) {
\r
42 removeList.add(change);
\r
44 new Exception("trying to add change that already exists").printStackTrace();
\r
46 updateChangeCounters();
\r
49 void remove(Collection<ClusterChange> changes) {
\r
50 clusterChanges.removeAll(changes);
\r
51 removeList.removeAll(changes);
\r
52 updateChangeCounters();
\r
56 return clusterChanges.size();
\r
60 clusterChanges.clear();
\r
62 updateChangeCounters();
\r