/* * This file is part of the HyperGraphDB source distribution. This is copyrighted * software. For permitted uses, licensing options and redistribution, please see * the LicensingInformation file at the root level of the distribution. * * Copyright (c) 2005-2010 Kobrix Software, Inc. All rights reserved. */ package org.hypergraphdb.storage; import java.util.Iterator; import java.util.Set; import org.hypergraphdb.HGPersistentHandle; import org.hypergraphdb.util.Pair; /** * <p> * Represents a storage layout graph. Implementations of this interface * could be RAM based, disk based or a mix of both. A storage layout graph * is represented roughly as the main <code>HGStore</code> - a * <code>HGPersistentHandle</code> keyed map whose values are either * <code>HGPersistentHandle</code> arrays or byte buffers. * </p> * <p> * In addition, a <code>StorageGraph</code> has a set of designated roots, or * starting points to the graph. The intent * is for <code>StorageGraph</code> instances to represent a portion of the * full disk storage for a given atom or a set of atoms, for example for * purposes of network communication. * </p> * @author Borislav Iordanov */ public interface StorageGraph extends Iterable<Pair<HGPersistentHandle, Object>> { /** * <p>Return the set of root handles for this storage sub-graph.</p> */ Set<HGPersistentHandle> getRoots(); HGPersistentHandle [] getLink(HGPersistentHandle handle); HGPersistentHandle store(HGPersistentHandle handle, HGPersistentHandle [] link); byte [] getData(HGPersistentHandle handle); HGPersistentHandle store(HGPersistentHandle handle, byte [] data); Iterator<Pair<HGPersistentHandle, Object>> iterator(); }