Dart DocumentationdormEntityKey

EntityKey class

class EntityKey {
 
 //---------------------------------
 //
 // Private properties
 //
 //---------------------------------
 
 Map<int, Map<dynamic, EntityKey>> _map = new Map<int, Map<dynamic, EntityKey>>();
 
 //---------------------------------
 //
 // Public properties
 //
 //---------------------------------
 
 List<EntityScan> entityScans = <EntityScan>[];
 
 //---------------------------------
 //
 // Constructor
 //
 //---------------------------------
 
 EntityKey();
 
 //---------------------------------
 //
 // Operator overloads
 //
 //---------------------------------
 
 void operator []= (int key, dynamic value) {
   if (_map[key] == null) _map[key] = new Map<dynamic, EntityKey>();
   
   if (_map[key][value] == null) _map[key][value] = new EntityKey();
 }
 
 EntityKey operator [] (List otherKey) => _map[otherKey[0]][otherKey[1]];
 
 //---------------------------------
 //
 // Public methods
 //
 //---------------------------------
 
 Entity getExistingEntity(Entity forEntity) {
   EntityScan result = getExistingEntityScans(forEntity).firstWhere(
     (EntityScan scan) => (scan.entity != forEntity),
     orElse: () => null
   );
   
   return (result != null) ? result.entity : null; 
 }
 
 bool areSameKeySignature(Entity entity, Entity compareEntity) => getExistingEntityScans(entity).contains(compareEntity._scan);
 
 bool remove(Entity entity) => getExistingEntityScans(entity).remove(entity._scan);
 
 List<EntityScan> getExistingEntityScans(Entity forEntity) {
   EntityKey nextKey;
   List<_ProxyEntry> identityProxies = forEntity._scan._identityProxies;
   int len = identityProxies.length;
   _ProxyEntry entry;
   int i, code;
   dynamic value;
   
   nextKey = EntityAssembler._instance._keyChain;
   
   for (i=0; i<len; i++) {
     entry = identityProxies[i];
     
     code = entry.proxy.propertySymbol.hashCode;
     value = entry.proxy._value;
     
     nextKey[code] = value;
     
     nextKey = nextKey[[code, value]];
   }
   
   return nextKey.entityScans;
 }
}

Constructors

new EntityKey() #

EntityKey();

Properties

List<EntityScan> entityScans #

List<EntityScan> entityScans = <EntityScan>[]

Operators

EntityKey operator [](List otherKey) #

EntityKey operator [] (List otherKey) => _map[otherKey[0]][otherKey[1]];

void operator []=(int key, value) #

void operator []= (int key, dynamic value) {
 if (_map[key] == null) _map[key] = new Map<dynamic, EntityKey>();
 
 if (_map[key][value] == null) _map[key][value] = new EntityKey();
}

Methods

bool areSameKeySignature(Entity entity, Entity compareEntity) #

bool areSameKeySignature(Entity entity, Entity compareEntity) => getExistingEntityScans(entity).contains(compareEntity._scan);

Entity getExistingEntity(Entity forEntity) #

Entity getExistingEntity(Entity forEntity) {
 EntityScan result = getExistingEntityScans(forEntity).firstWhere(
   (EntityScan scan) => (scan.entity != forEntity),
   orElse: () => null
 );
 
 return (result != null) ? result.entity : null; 
}

List<EntityScan> getExistingEntityScans(Entity forEntity) #

List<EntityScan> getExistingEntityScans(Entity forEntity) {
 EntityKey nextKey;
 List<_ProxyEntry> identityProxies = forEntity._scan._identityProxies;
 int len = identityProxies.length;
 _ProxyEntry entry;
 int i, code;
 dynamic value;
 
 nextKey = EntityAssembler._instance._keyChain;
 
 for (i=0; i<len; i++) {
   entry = identityProxies[i];
   
   code = entry.proxy.propertySymbol.hashCode;
   value = entry.proxy._value;
   
   nextKey[code] = value;
   
   nextKey = nextKey[[code, value]];
 }
 
 return nextKey.entityScans;
}

bool remove(Entity entity) #

bool remove(Entity entity) => getExistingEntityScans(entity).remove(entity._scan);