package org.hypergraphdb.handle;
import java.util.concurrent.atomic.AtomicInteger;
import org.hypergraphdb.HGHandleFactory;
import org.hypergraphdb.HGPersistentHandle;
import org.hypergraphdb.storage.BAUtils;
/**
*
* <p>
* Produces integer valued persistent handles. This leads to more compact
* storage and an overall performance improvement due to less read/write time as
* well as less time spent comparing and sorting handles. As with other handle
* factories based on a local seed, handles generated by this factory will not
* be universal and will certainly result in conflicts in a distributed
* environment.
* </p>
*
* @author Borislav Iordanov
*
*/
public class IntHandleFactory implements HGHandleFactory
{
private static final IntPersistentHandle any = new IntPersistentHandle(1);
private static final IntPersistentHandle nil = new IntPersistentHandle(0);
private static final IntPersistentHandle topType = new IntPersistentHandle(100);
private static final IntPersistentHandle linkType = new IntPersistentHandle(101);
private static final IntPersistentHandle nullType = new IntPersistentHandle(102);
private static final IntPersistentHandle subsumesType = new IntPersistentHandle(103);
private AtomicInteger next = new AtomicInteger(1000);
public int getNext()
{
return next.get();
}
public void setNext(int next)
{
this.next.set(next);
}
public HGPersistentHandle anyHandle()
{
return any;
}
public HGPersistentHandle makeHandle()
{
return new IntPersistentHandle(next.getAndIncrement());
}
public HGPersistentHandle makeHandle(String handleAsString)
{
return new IntPersistentHandle(Integer.parseInt(handleAsString));
}
public HGPersistentHandle makeHandle(byte[] buffer)
{
return new IntPersistentHandle(BAUtils.readInt(buffer, 0));
}
public HGPersistentHandle makeHandle(byte[] buffer, int offset)
{
return new IntPersistentHandle(BAUtils.readInt(buffer, offset));
}
public HGPersistentHandle nullHandle()
{
return nil;
}
public HGPersistentHandle topTypeHandle()
{
return topType;
}
public HGPersistentHandle nullTypeHandle()
{
return nullType;
}
public HGPersistentHandle linkTypeHandle()
{
return linkType;
}
public HGPersistentHandle subsumesTypeHandle()
{
return subsumesType;
}
}