]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.impl/src/org/simantics/db/impl/query/CacheCollectionResult.java
Fixed multiple issues causing dangling references to discarded queries
[simantics/platform.git] / bundles / org.simantics.db.impl / src / org / simantics / db / impl / query / CacheCollectionResult.java
index 72ca07e65af284507525a35181cf6d99a412c660..b87fb840abecde563718330773ec412cb5f603b6 100644 (file)
@@ -1,73 +1,73 @@
-package org.simantics.db.impl.query;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-\r
-public class CacheCollectionResult {\r
-       public static final int LEVELS = 10;\r
-       private int level = 0;\r
-       private int position = -1;\r
-       private int currentLength = 0;\r
-       private int size = 0;\r
-       private ArrayList<CacheEntryBase> currentLevel;\r
-       public ArrayList<CacheEntryBase> levels[] = new ArrayList[LEVELS];\r
-       public CacheCollectionResult() {\r
-               for(int i=0;i<LEVELS;i++) {\r
-                       levels[i] = new ArrayList<CacheEntryBase>();\r
-               }\r
-       }\r
-       public void add(CacheEntryBase entry) {\r
-               short level = entry.getLevel();\r
-               if(level < (LEVELS-1)) levels[level].add(entry);\r
-               else levels[(LEVELS-1)].add(entry);\r
-               size++;\r
-       }\r
-       public Collection<CacheEntryBase> toCollection() {\r
-               ArrayList<CacheEntryBase> result = new ArrayList<CacheEntryBase>(size());\r
-               for(int i=0;i<LEVELS;i++)\r
-                       result.addAll(levels[i]);\r
-               return result;\r
-       }\r
-       public int size() {\r
-               return size;\r
-       }\r
-       public boolean isAtStart() {\r
-               return level == 0 && position == -1;\r
-       }\r
-       public void restart() {\r
-               level = 0;\r
-               position = -1;\r
-               currentLevel = levels[0];\r
-               currentLength = currentLevel.size();\r
-       }\r
-       public CacheEntryBase next(int maxLevel) {\r
-               //System.err.println("next " + position + " " + level);\r
-               position++;\r
-               if(position >= currentLength) {\r
-                       if(level == (LEVELS-1)) return null;\r
-                       if(level == maxLevel) return null;\r
-                       level++;\r
-                       position=-1;\r
-                       currentLevel = levels[level];\r
-                       currentLength = currentLevel.size();\r
-                       return next(maxLevel);\r
-               }\r
-               return currentLevel.get(position);\r
-       }\r
-       public void remove() {\r
-               int lastPosition = currentLevel.size()-1;\r
-               CacheEntryBase last = currentLevel.remove(lastPosition);\r
-               if(lastPosition > position) {\r
-                       currentLevel.set(position, last);\r
-               }\r
-               currentLength--;\r
-               position--;\r
-               size--;\r
-       }\r
-       public void setLevel(CacheEntryBase current, int level) {\r
-               if(level == current.level) return;\r
-               current.level = (short)level;\r
-               remove();\r
-               add(current);\r
-       }\r
+package org.simantics.db.impl.query;
+
+import java.util.ArrayList;
+import java.util.Collection;
+
+public class CacheCollectionResult {
+       public static final int LEVELS = 10;
+       private int level = 0;
+       private int position = -1;
+       private int currentLength = 0;
+       private int size = 0;
+       private ArrayList<CacheEntryBase> currentLevel;
+       public ArrayList<CacheEntryBase> levels[] = new ArrayList[LEVELS];
+       public CacheCollectionResult() {
+               for(int i=0;i<LEVELS;i++) {
+                       levels[i] = new ArrayList<CacheEntryBase>();
+               }
+       }
+       public void add(CacheEntryBase entry) {
+               short level = entry.getLevel();
+               if(level < (LEVELS-1)) levels[level].add(entry);
+               else levels[(LEVELS-1)].add(entry);
+               size++;
+       }
+       public Collection<CacheEntryBase> toCollection() {
+               ArrayList<CacheEntryBase> result = new ArrayList<CacheEntryBase>(size());
+               for(int i=0;i<LEVELS;i++)
+                       result.addAll(levels[i]);
+               return result;
+       }
+       public int size() {
+               return size;
+       }
+       public boolean isAtStart() {
+               return level == 0 && position == -1;
+       }
+       public void restart() {
+               level = 0;
+               position = -1;
+               currentLevel = levels[0];
+               currentLength = currentLevel.size();
+       }
+       public CacheEntryBase next(int maxLevel) {
+               //System.err.println("next " + position + " " + level);
+               position++;
+               if(position >= currentLength) {
+                       if(level == (LEVELS-1)) return null;
+                       if(level == maxLevel) return null;
+                       level++;
+                       position=-1;
+                       currentLevel = levels[level];
+                       currentLength = currentLevel.size();
+                       return next(maxLevel);
+               }
+               return currentLevel.get(position);
+       }
+       public void remove() {
+               int lastPosition = currentLevel.size()-1;
+               CacheEntryBase last = currentLevel.remove(lastPosition);
+               if(lastPosition > position) {
+                       currentLevel.set(position, last);
+               }
+               currentLength--;
+               position--;
+               size--;
+       }
+       public void setLevel(CacheEntryBase current, int level) {
+               if(level == current.level) return;
+               current.level = (short)level;
+               remove();
+               add(current);
+       }
 }
\ No newline at end of file