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 currentLevel; public ArrayList levels[] = new ArrayList[LEVELS]; public CacheCollectionResult() { for(int i=0;i(); } } 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 toCollection() { ArrayList result = new ArrayList(size()); for(int i=0;i= 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); } }