internal ImmutableModelGroup(GreenModelGroup green, MutableModelGroup mutableModelGroup) { this.green = green; this.mutableModelGroup = new WeakReference <MutableModelGroup>(mutableModelGroup); this.models = new ConditionalWeakTable <ModelId, ImmutableModel>(); this.objects = new ConditionalWeakTable <ObjectId, ImmutableObjectBase>(); }
internal MutableModel(GreenModel green, ImmutableModel immutableModel) { this.id = green.Id; this.group = null; this.green = green; this.updater = new ThreadLocal <GreenModelUpdater>(); this.readOnly = false; this.objects = new ConditionalWeakTable <ObjectId, MutableObject>(); this.immutableModel = new WeakReference <ImmutableModel>(immutableModel); }
internal MutableModel(ModelId id, MutableModelGroup group, bool readOnly, ImmutableModel immutableModel) { this.id = id; this.group = group; this.green = null; this.updater = null; this.readOnly = readOnly; this.objects = null; this.immutableModel = new WeakReference <ImmutableModel>(immutableModel); }
public void AddReference(MutableModelGroup reference) { GreenModelGroup gmg = reference.Green; foreach (var greenReference in gmg.References) { this.AddReference(greenReference.Value); } foreach (var greenModel in gmg.Models) { this.AddReference(greenModel.Value); } }
public MutableModel ToMutable(bool createNew = false) { MutableModel result = null; if (!createNew) { if (this.mutableModel.TryGetTarget(out result) && result != null) { return(result); } } MutableModel newModel = null; if (this.group != null) { MutableModelGroup mutableGroup = this.group.ToMutable(createNew); newModel = mutableGroup.GetModel(this.green.Id); } else { newModel = new MutableModel(this.green, this); } return(newModel); }