/** Find the NodeId for a node, or return NodeId.NodeDoesNotExist */ @Override public NodeId getNodeIdForNode(Node node) { return _idForNode(node, false) ; }
/** Get the Node for this NodeId, or null if none */ @Override public Node getNodeForNodeId(NodeId id) { return _retrieveNodeByNodeId(id) ; }
private NodeId _idForNode(Node node, boolean allocate) { if ( node == Node.ANY ) return NodeId.NodeIdAny ; NodeId nodeId = accessIndex(node, allocate) ; return nodeId ; }
@Override public boolean isEmpty() { return getObjects().isEmpty() ; }
@Override public boolean containsNodeId(NodeId nodeId) { Node x = getNodeForNodeId(nodeId) ; return x == null ; }
public NodeTableNative(Index nodeToId, ObjectFile objectFile) { this() ; init(nodeToId, objectFile) ; }
@Override public Iterator<Pair<NodeId, Node>> all() { return all2() ; }
@Override public boolean containsNode(Node node) { NodeId x = getNodeIdForNode(node) ; return NodeId.isDoesNotExist(x) ; }
private Node _retrieveNodeByNodeId(NodeId id) { if ( NodeId.isDoesNotExist(id) ) return null ; if ( NodeId.isAny(id) ) return null ; Node n = readNodeFromTable(id) ; return n ; }
private NodeTable buildNodeTable(FileSet fsIndex, FileSet fsObjectFile, StoreParams params) { RecordFactory recordFactory = new RecordFactory(SystemTDB.LenNodeHash, SystemTDB.SizeOfNodeId) ; Index idx = /*indexBuilder.*/buildIndex(fsIndex, recordFactory, params) ; ObjectFile objectFile = objectFileBuilder.buildObjectFile(fsObjectFile, Names.extNodeData) ; NodeTable nodeTable = new NodeTableNative(idx, objectFile) ; nodeTable = NodeTableCache.create(nodeTable, params.getNode2NodeIdCacheSize(), params.getNodeId2NodeCacheSize(), params.getNodeMissCacheSize()) ; nodeTable = NodeTableInline.create(nodeTable) ; return nodeTable ; }
@Override public void sync() { if ( syncNeeded ) { if ( getObjects() != null ) getObjects().sync(); if ( nodeHashToId != null ) nodeHashToId.sync(); syncNeeded = false; } }
@Override public synchronized void close() { // Close once. This may be shared (e.g. triples table and quads table). if ( nodeHashToId != null ) { nodeHashToId.close() ; nodeHashToId = null ; } if ( getObjects() != null ) { getObjects().close() ; objects = null ; } }
/** Find the NodeId for a node, allocating a new NodeId if the Node does not yet have a NodeId */ @Override public NodeId getAllocateNodeId(Node node) { return _idForNode(node, true) ; }
private final NodeId writeNodeToTable(Node node) { syncNeeded = true ; long x = NodeLib.encodeStore(node, getObjects(), writeBuffer) ; return NodeId.create(x); }
private final Node readNodeFromTable(NodeId id) { synchronized (this) // Pair to accessIndex { if ( id.getId() >= getObjects().length() ) return null ; return NodeLib.fetchDecode(id.getId(), getObjects()) ; } } // -------- NodeId<->Node
@Override public NodeId allocOffset() { return NodeId.create(getObjects().length()) ; }