/* * (c) Copyright 2011 Epimorphics Ltd. * All rights reserved. * [See end of file] */ package structure.radix; import java.util.Iterator ; import org.openjena.atlas.iterator.Iter ; import org.openjena.atlas.iterator.Transform ; import com.hp.hpl.jena.tdb.base.record.Record ; import com.hp.hpl.jena.tdb.base.record.RecordFactory ; import com.hp.hpl.jena.tdb.index.RangeIndex ; public class RadixIndex implements RangeIndex { // DEBUG public RadixTree radix = new RadixTree() ; private RecordFactory recordFactory ; public RadixIndex(RecordFactory recordFactory) { this.recordFactory = recordFactory ; if ( recordFactory.hasValue() ) throw new UnsupportedOperationException("Records with values") ; } @Override public Record find(Record record) { RadixNode radixNode = radix.find(record.getKey()) ; if ( radixNode == null ) return null ; return record ; } @Override public boolean contains(Record record) { return find(record) != null ; } @Override public boolean add(Record record) { return radix.insert(record.getKey()) ; } @Override public boolean delete(Record record) { return radix.delete(record.getKey()) ; } Transform t = new Transform() { @Override public Record convert(byte[] item) { return recordFactory.create(item) ; }} ; @Override public Iterator iterator() { return Iter.map(radix.iterator(), t) ; } @Override public RecordFactory getRecordFactory() { return recordFactory ; } @Override public void close() {} @Override public boolean isEmpty() { return false ; } @Override public void clear() {} @Override public void check() {} @Override public long size() { return radix.size() ; } @Override public long sessionTripleCount() { return 0 ; } @Override public void sync() {} @Override public Iterator iterator(Record recordMin, Record recordMax) { return Iter.map(radix.iterator(recordMin.getKey(), recordMax.getKey()), t) ; } @Override public Record minKey() { // Better??? Iterator iter = radix.iterator() ; if ( !iter.hasNext() ) return null ; return t.convert(radix.iterator().next()) ; } @Override public Record maxKey() { return null ; } } /* * (c) Copyright 2011 Epimorphics Ltd. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. The name of the author may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */