@Override public boolean isEmpty() { return !contains(Node.ANY, Node.ANY, Node.ANY, Node.ANY); }
@Override public void clear() { deleteAny(Node.ANY, Node.ANY, Node.ANY, Node.ANY); }
@Override public Iterator<Quad> find() { return find(Node.ANY, Node.ANY, Node.ANY, Node.ANY) ; }
@Override /** Simple implementation but done without assuming iterator.remove() */ public void deleteAny(Node g, Node s, Node p, Node o) { // Delete in slices rather than assume .remove() on the iterator is // implemented. // We keep executing find(g, s, p, o) until we don't get a full slice. Quad[] buffer = new Quad[DeleteBufferSize]; while (true) { Iterator<Quad> iter = find(g, s, p, o); // Get a slice int len = 0; for ( ; len < DeleteBufferSize ; len++ ) { if ( !iter.hasNext() ) break; buffer[len] = iter.next(); } // Delete them. for ( int i = 0 ; i < len ; i++ ) { delete(buffer[i]); buffer[i] = null; } // Finished? if ( len < DeleteBufferSize ) break; } }
@Override public void add(Node g, Node s, Node p, Node o) { add(new Quad(g,s,p,o)) ; } @Override
@Override public void delete(Node g, Node s, Node p, Node o) { delete(new Quad(g,s,p,o)) ; }
@Override public boolean contains(Node g, Node s, Node p, Node o) { Iterator<Quad> iter = find(g, s, p, o); boolean b = iter.hasNext(); Iter.close(iter); return b; }
@Override public boolean containsGraph(Node graphNode) { if ( Quad.isDefaultGraph(graphNode) ) return true; if ( Quad.isUnionGraph(graphNode) ) return true; return contains(graphNode, Node.ANY, Node.ANY, Node.ANY); }
@Override public boolean contains(Quad quad) { return contains(quad.getGraph(), quad.getSubject(), quad.getPredicate(), quad.getObject()) ; }