
jadex.rules.state.javaimpl.OAVLongIdGenerator Maven / Gradle / Ivy
package jadex.rules.state.javaimpl;
import java.util.LinkedHashMap;
import java.util.Map;
import jadex.rules.state.IOAVState;
import jadex.rules.state.OAVObjectType;
/**
* Id generator based on long values.
*/
public class OAVLongIdGenerator implements IOAVIdGenerator
{
//-------- attributes --------
/** The id counter. */
protected long nextid;
/** The flag indicating if content ids should be produced. */
protected boolean iscontentid;
//-------- constructor --------
/**
* Create a new id generator.
*/
public OAVLongIdGenerator()
{
this(false);
}
/**
* Create a new id generator.
*/
public OAVLongIdGenerator(boolean iscontentid)
{
nextid = Long.MIN_VALUE;
this.iscontentid = iscontentid;
}
//-------- methods --------
/**
* Create a unique id.
* @param state The state.
* @param type The object type.
* @return The new id.
*/
public Object createId(IOAVState state, OAVObjectType type)
{
long start = nextid;
Object ret = iscontentid? new OAVContentId(nextid++): new OAVObjectId(nextid++);
if(state.containsObject(ret))
System.out.println("Warning, id overflow.");
while(state.containsObject(ret) && nextid!=start)
ret = new OAVObjectId(nextid++);
if(state.containsObject(ret))
throw new RuntimeException("No free id available.");
return ret;
}
/**
* Test if an object is an id.
* @param state The state.
* @param type The object type.
* @return The new id.
*/
public boolean isId(Object id)
{
return id!=null && id instanceof OAVObjectId;
}
/**
* Main for testing.
* @param args
*/
public static void main(String[] args)
{
IOAVState state = OAVStateFactory.createOAVState(null);
OAVLongIdGenerator gen = new OAVLongIdGenerator();
for(long i=0;; i++)
{
Object id = gen.createId(state, null);
if(i%1000000==0)
System.out.println(i+": "+id);
}
}
//-------- helper classes --------
/**
* An id for an OAV object.
*/
private static class OAVObjectId
{
//-------- attributes --------
/** The id value. */
protected long id;
//-------- constructors --------
/**
* Create an OAV object id with the given id value.
* @param id The id value.
*/
public OAVObjectId(long id)
{
this.id = id;
}
//-------- methods --------
/**
* Create a string representation of this OAV object id.
*/
public String toString()
{
return "OAVObjectId("+id+")";
}
/**
* Test if two id's are equal.
* @param id The OAV object id to compare to.
* /
public boolean equals(Object id)
{
return id instanceof OAVObjectId && this.id==((OAVObjectId)id).id;
}*/
/**
* Return the hashcode for this id.
* @return The hashcode for this id.
* /
public int hashCode()
{
// Taken from java.lang.Long
// Todo: is this useful?
return (int)(id ^ (id >>> 32));
}*/
}
/**
* An id for an OAV object.
*/
private static class OAVContentId extends OAVObjectId implements IOAVContentId
{
//-------- attributes --------
/** The content map. */
protected Map content;
//-------- constructors --------
/**
* Create an OAV object id with the given id value.
* @param id The id value.
*/
public OAVContentId(long id)
{
super(id);
this.content = new LinkedHashMap();
}
//-------- methods --------
/**
* Get the content.
* @return The content.
*/
public Map getContent()
{
return content;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy