예제 #1
0
 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>();
 }
예제 #2
0
 internal MutableModelGroup(GreenModelGroup green, ImmutableModelGroup immutableModelGroup)
 {
     this.green               = green;
     this.updater             = new ThreadLocal <GreenModelUpdater>();
     this.immutableModelGroup = new WeakReference <ImmutableModelGroup>(immutableModelGroup);
     this.models              = new ConditionalWeakTable <ModelId, MutableModel>();
     this.objects             = new ConditionalWeakTable <ObjectId, MutableObject>();
 }
예제 #3
0
        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);
            }
        }
예제 #4
0
        internal GreenModelUpdateContext BeginUpdate()
        {
            GreenModelUpdater updater = this.updater.Value;

            if (updater != null)
            {
                return(new GreenModelUpdateContext(false, updater, this.green));
            }
            else
            {
                GreenModelGroup green = this.green;
                updater            = new GreenModelUpdater(green, this);
                this.updater.Value = updater;
                return(new GreenModelUpdateContext(true, updater, green));
            }
        }
예제 #5
0
 public void AddReference(ImmutableModel reference)
 {
     if (reference.ModelGroup != null)
     {
         GreenModelGroup gmg = reference.ModelGroup.Green;
         foreach (var greenReference in gmg.References)
         {
             this.AddReference(greenReference.Value);
         }
         foreach (var greenModel in gmg.Models)
         {
             this.AddReference(greenModel.Value);
         }
     }
     else
     {
         this.AddReference(reference.Green);
     }
 }