Add entity and id comparators. Store entity id in Entity just as we put a reference there to the collection.
This commit is contained in:
parent
d69a61d6c2
commit
3191ff7916
@ -8,7 +8,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentSkipListMap;
|
||||||
import java.util.concurrent.ConcurrentSkipListSet;
|
import java.util.concurrent.ConcurrentSkipListSet;
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
@ -230,10 +230,11 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
if (this.ids.contains(id)) return null;
|
if (this.ids.contains(id)) return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set this as the coll if possible.
|
// Add entity reference info
|
||||||
if (entity instanceof Entity)
|
if (entity instanceof Entity)
|
||||||
{
|
{
|
||||||
((Entity)entity).setColl(this);
|
((Entity)entity).setColl(this);
|
||||||
|
((Entity)entity).setid(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attach
|
// Attach
|
||||||
@ -293,9 +294,9 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
// SYNCLOG
|
// SYNCLOG
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
protected Map<L, Long> lastMtime = new ConcurrentHashMap<L, Long>();
|
protected Map<L, Long> lastMtime;
|
||||||
protected Map<L, Object> lastRaw = new ConcurrentHashMap<L, Object>();
|
protected Map<L, Object> lastRaw;
|
||||||
protected Set<L> lastDefault = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
protected Set<L> lastDefault;
|
||||||
|
|
||||||
protected synchronized void clearSynclog(L id)
|
protected synchronized void clearSynclog(L id)
|
||||||
{
|
{
|
||||||
@ -308,6 +309,7 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
// SYNC LOWLEVEL IO ACTIONS
|
// SYNC LOWLEVEL IO ACTIONS
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
|
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||||
@Override
|
@Override
|
||||||
public synchronized E removeAtLocal(L id)
|
public synchronized E removeAtLocal(L id)
|
||||||
{
|
{
|
||||||
@ -321,6 +323,13 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
this.entity2id.remove(entity);
|
this.entity2id.remove(entity);
|
||||||
this.entities.remove(entity);
|
this.entities.remove(entity);
|
||||||
|
|
||||||
|
// Remove entity reference info
|
||||||
|
if (entity instanceof Entity)
|
||||||
|
{
|
||||||
|
((Entity)entity).setColl(null);
|
||||||
|
((Entity)entity).setid(null);
|
||||||
|
}
|
||||||
|
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -546,7 +555,7 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
// CONSTRUCT
|
// CONSTRUCT
|
||||||
// -------------------------------------------- //
|
// -------------------------------------------- //
|
||||||
|
|
||||||
public Coll(Db<?> db, MPlugin mplugin, String idStrategyName, String name, Class<E> entityClass, Class<L> idClass, boolean creative)
|
public Coll(Db<?> db, MPlugin mplugin, String idStrategyName, String name, Class<E> entityClass, Class<L> idClass, boolean creative, Comparator<? super L> idComparator, Comparator<? super E> entityComparator)
|
||||||
{
|
{
|
||||||
// Setup the name and the parsed parts
|
// Setup the name and the parsed parts
|
||||||
this.name = name;
|
this.name = name;
|
||||||
@ -582,20 +591,20 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
this.collDriverObject = db.getCollDriverObject(this);
|
this.collDriverObject = db.getCollDriverObject(this);
|
||||||
|
|
||||||
// STORAGE
|
// STORAGE
|
||||||
this.ids = new ConcurrentSkipListSet<L>();
|
this.ids = new ConcurrentSkipListSet<L>(idComparator);
|
||||||
this.entities = new ConcurrentSkipListSet<E>();
|
this.entities = new ConcurrentSkipListSet<E>(entityComparator);
|
||||||
this.id2entity = new ConcurrentHashMap<L, E>();
|
this.id2entity = new ConcurrentSkipListMap<L, E>(idComparator);
|
||||||
this.entity2id = new ConcurrentHashMap<E, L>();
|
this.entity2id = new ConcurrentSkipListMap<E, L>(entityComparator);
|
||||||
|
|
||||||
// IDENTIFIED CHANGES
|
// IDENTIFIED CHANGES
|
||||||
this.localAttachIds = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
this.localAttachIds = new ConcurrentSkipListSet<L>(idComparator);
|
||||||
this.localDetachIds = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
this.localDetachIds = new ConcurrentSkipListSet<L>(idComparator);
|
||||||
this.changedIds = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
this.changedIds = new ConcurrentSkipListSet<L>(idComparator);
|
||||||
|
|
||||||
// SYNCLOG
|
// SYNCLOG
|
||||||
this.lastMtime = new ConcurrentHashMap<L, Long>();
|
this.lastMtime = new ConcurrentSkipListMap<L, Long>(idComparator);
|
||||||
this.lastRaw = new ConcurrentHashMap<L, Object>();
|
this.lastRaw = new ConcurrentSkipListMap<L, Object>(idComparator);
|
||||||
this.lastDefault = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
this.lastDefault = new ConcurrentSkipListSet<L>(idComparator);
|
||||||
|
|
||||||
final Coll<E, L> me = this;
|
final Coll<E, L> me = this;
|
||||||
this.tickTask = new Runnable()
|
this.tickTask = new Runnable()
|
||||||
@ -604,6 +613,11 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Coll(Db<?> db, MPlugin mplugin, String idStrategyName, String name, Class<E> entityClass, Class<L> idClass, boolean creative)
|
||||||
|
{
|
||||||
|
this(db, mplugin, idStrategyName, name, entityClass, idClass, creative, null, null);
|
||||||
|
}
|
||||||
|
|
||||||
public Coll(MPlugin mplugin, String idStrategyName, String name, Class<E> entityClass, Class<L> idClass, boolean creative)
|
public Coll(MPlugin mplugin, String idStrategyName, String name, Class<E> entityClass, Class<L> idClass, boolean creative)
|
||||||
{
|
{
|
||||||
this(MCore.getDb(), mplugin, idStrategyName, name, entityClass, idClass, creative);
|
this(MCore.getDb(), mplugin, idStrategyName, name, entityClass, idClass, creative);
|
||||||
|
@ -18,6 +18,10 @@ public abstract class Entity<E extends Entity<E, L>, L extends Comparable<? supe
|
|||||||
protected void setColl(Coll<E, L> val) { this.coll = val; }
|
protected void setColl(Coll<E, L> val) { this.coll = val; }
|
||||||
public Coll<E, L> getColl() { return this.coll; }
|
public Coll<E, L> getColl() { return this.coll; }
|
||||||
|
|
||||||
|
protected transient L id;
|
||||||
|
protected void setid(L id) { this.id = id; }
|
||||||
|
public L getId() { return this.id; }
|
||||||
|
|
||||||
public String getUniverse()
|
public String getUniverse()
|
||||||
{
|
{
|
||||||
Coll<E, L> coll = this.getColl();
|
Coll<E, L> coll = this.getColl();
|
||||||
@ -53,13 +57,6 @@ public abstract class Entity<E extends Entity<E, L>, L extends Comparable<? supe
|
|||||||
return ! this.attached();
|
return ! this.attached();
|
||||||
}
|
}
|
||||||
|
|
||||||
public L getId()
|
|
||||||
{
|
|
||||||
Coll<E, L> coll = this.getColl();
|
|
||||||
if (coll == null) return null;
|
|
||||||
return coll.getId(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void changed()
|
public void changed()
|
||||||
{
|
{
|
||||||
L id = this.getId();
|
L id = this.getId();
|
||||||
|
Loading…
Reference in New Issue
Block a user