void recordMemberRemoved(Record &def, Variable &key) { if(keys.contains(key.name())) { key.audienceForChangeFrom() -= this; parents.remove(&key); removeFromLookup(key.name(), key.value(), def); } }
void recordMemberAdded(Record &def, Variable &key) { // Keys must be observed so that they are indexed in the lookup table. if(keys.contains(key.name())) { // Index definition using its current value. // Observe empty keys so we'll get the key's value when it's set. if(addToLookup(key.name(), key.value(), def) || isEmptyKeyValue(key.value())) { parents.insert(&key, &def); key.audienceForChangeFrom() += this; } } }