/* * 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.atom; import org.hypergraphdb.HGHandle; import org.hypergraphdb.HGPersistentHandle; import org.hypergraphdb.HyperGraph; import org.hypergraphdb.IncidenceSetRef; import org.hypergraphdb.LazyRef; import org.hypergraphdb.type.HGAtomType; /** * <p> * Implements the HyperGraph type of <code>HGAtomSet</code> atoms. * </p> * * @author Borislav Iordanov */ public class AtomSetType implements HGAtomType { private HyperGraph graph; public void setHyperGraph(HyperGraph hg) { this.graph = hg; } public Object make(HGPersistentHandle handle, LazyRef<HGHandle[]> targetSet, IncidenceSetRef incidenceSet) { byte [] data = graph.getStore().getData(handle); HGAtomSet set = new HGAtomSet(); for (int pos = 0; pos < data.length; pos += 16) set.add(graph.getHandleFactory().makeHandle(data, pos)); return set; } public HGPersistentHandle store(Object instance) { HGAtomSet set = (HGAtomSet)instance; HGPersistentHandle result = graph.getHandleFactory().makeHandle(); byte [] A = new byte[set.size()*16]; int pos = 0; for (HGHandle h:set) { System.arraycopy(graph.getPersistentHandle(h).toByteArray(), 0, A, pos, 16); pos += 16; } graph.getStore().store(result, A); return result; } public void release(HGPersistentHandle handle) { graph.getStore().removeData(handle); } public boolean subsumes(Object general, Object specific) { return general == specific; } }