public @Override DAGStorageProvider newInstance(@NonNull ObjectStore treeStore) { return new HeapDAGStorageProvider(treeStore); } }
@Override public DAG getOrCreateTree(TreeId treeId, ObjectId originalTreeId) { DAG dag = trees.get(treeId); if (dag == null) { dag = createTree(treeId, originalTreeId); } return dag;// .clone(); }
public void close() { dispose(); }
@Override public void save(Map<TreeId, DAG> dags) { Map<TreeId, DAG> cached = Maps.filterKeys(dags, heapTrees); heap().save(cached); if (cached.size() < dags.size()) { disk().save(Maps.filterKeys(dags, diskTrees)); } }
@Override public List<DAG> getTrees(Set<TreeId> ids) throws NoSuchElementException { List<DAG> cached = heap.getTrees(Sets.filter(ids, heapTrees)); List<DAG> res = cached; if (cached.size() < ids.size()) { if (disk != null) { List<DAG> stored = disk.getTrees(Sets.filter(ids, diskTrees)); res.addAll(stored); } } if (res.size() < ids.size()) { Set<TreeId> resids = Sets.newHashSet(Iterables.transform(res, (d) -> d.getId())); throw new NoSuchElementException(Sets.difference(ids, resids).toString()); } return res; }
@Override protected HeapDAGStorageProvider createStorageProvider(ObjectStore source) { return new HeapDAGStorageProvider(source); }
@Override public DAG getOrCreateTree(TreeId treeId, ObjectId originalTreeId) { DAG dag = trees.get(treeId); if (dag == null) { dag = createTree(treeId, originalTreeId); } return dag;// .clone(); }
@Override public void dispose() { heap.dispose(); if (disk != null) { disk.dispose(); } heap = null; nodeStore = null; disk = null; treeCache = null; source = null; }
@Override protected HeapDAGStorageProvider createStorageProvider(ObjectStore source) { return new HeapDAGStorageProvider(source); }
public static NodeOrdering buildNodeOrdering(@NonNull Envelope maxBounds) { Envelope preciseBounds = RevObjects.makePrecise(maxBounds); int maxDepth = Quadrant.findMaxDepth(preciseBounds, QuadTreeClusteringStrategyBuilder.ABSOLUTE_MAX_DEPTH); return new QuadTreeClusteringStrategy(RevTree.EMPTY, new HeapDAGStorageProvider(null), preciseBounds, maxDepth); }
CachingDAGStorageProvider(ObjectStore source) { this.source = source; this.treeCache = new TreeCache(source); heap = new HeapDAGStorageProvider(this.source, this.treeCache); nodeStore = heap; heapTrees = (id) -> id.depthLength() <= HEAP_DEPTH_THRESHOLD; diskTrees = (id) -> id.depthLength() > HEAP_DEPTH_THRESHOLD; }