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.Entry;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ConcurrentSkipListMap;
|
||||
import java.util.concurrent.ConcurrentSkipListSet;
|
||||
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;
|
||||
}
|
||||
|
||||
// Set this as the coll if possible.
|
||||
// Add entity reference info
|
||||
if (entity instanceof Entity)
|
||||
{
|
||||
((Entity)entity).setColl(this);
|
||||
((Entity)entity).setid(id);
|
||||
}
|
||||
|
||||
// Attach
|
||||
@ -293,9 +294,9 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
||||
// SYNCLOG
|
||||
// -------------------------------------------- //
|
||||
|
||||
protected Map<L, Long> lastMtime = new ConcurrentHashMap<L, Long>();
|
||||
protected Map<L, Object> lastRaw = new ConcurrentHashMap<L, Object>();
|
||||
protected Set<L> lastDefault = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
||||
protected Map<L, Long> lastMtime;
|
||||
protected Map<L, Object> lastRaw;
|
||||
protected Set<L> lastDefault;
|
||||
|
||||
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
|
||||
// -------------------------------------------- //
|
||||
|
||||
@SuppressWarnings({ "unchecked", "rawtypes" })
|
||||
@Override
|
||||
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.entities.remove(entity);
|
||||
|
||||
// Remove entity reference info
|
||||
if (entity instanceof Entity)
|
||||
{
|
||||
((Entity)entity).setColl(null);
|
||||
((Entity)entity).setid(null);
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
@ -546,7 +555,7 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
||||
// 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
|
||||
this.name = name;
|
||||
@ -582,20 +591,20 @@ public class Coll<E, L extends Comparable<? super L>> implements CollInterface<E
|
||||
this.collDriverObject = db.getCollDriverObject(this);
|
||||
|
||||
// STORAGE
|
||||
this.ids = new ConcurrentSkipListSet<L>();
|
||||
this.entities = new ConcurrentSkipListSet<E>();
|
||||
this.id2entity = new ConcurrentHashMap<L, E>();
|
||||
this.entity2id = new ConcurrentHashMap<E, L>();
|
||||
this.ids = new ConcurrentSkipListSet<L>(idComparator);
|
||||
this.entities = new ConcurrentSkipListSet<E>(entityComparator);
|
||||
this.id2entity = new ConcurrentSkipListMap<L, E>(idComparator);
|
||||
this.entity2id = new ConcurrentSkipListMap<E, L>(entityComparator);
|
||||
|
||||
// IDENTIFIED CHANGES
|
||||
this.localAttachIds = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
||||
this.localDetachIds = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
||||
this.changedIds = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
||||
this.localAttachIds = new ConcurrentSkipListSet<L>(idComparator);
|
||||
this.localDetachIds = new ConcurrentSkipListSet<L>(idComparator);
|
||||
this.changedIds = new ConcurrentSkipListSet<L>(idComparator);
|
||||
|
||||
// SYNCLOG
|
||||
this.lastMtime = new ConcurrentHashMap<L, Long>();
|
||||
this.lastRaw = new ConcurrentHashMap<L, Object>();
|
||||
this.lastDefault = Collections.newSetFromMap(new ConcurrentHashMap<L, Boolean>());
|
||||
this.lastMtime = new ConcurrentSkipListMap<L, Long>(idComparator);
|
||||
this.lastRaw = new ConcurrentSkipListMap<L, Object>(idComparator);
|
||||
this.lastDefault = new ConcurrentSkipListSet<L>(idComparator);
|
||||
|
||||
final Coll<E, L> me = this;
|
||||
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)
|
||||
{
|
||||
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; }
|
||||
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()
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
public L getId()
|
||||
{
|
||||
Coll<E, L> coll = this.getColl();
|
||||
if (coll == null) return null;
|
||||
return coll.getId(this);
|
||||
}
|
||||
|
||||
public void changed()
|
||||
{
|
||||
L id = this.getId();
|
||||
|
Loading…
Reference in New Issue
Block a user