コード例 #1
0
        public override bool Contains(T item)
        {
            GreenList green     = this.GetGreen(true);
            object    greenItem = this.obj.MModel.ToGreenValue(item);

            return(green.Contains(greenItem));
        }
コード例 #2
0
        public override int IndexOf(T item)
        {
            GreenList green     = this.GetGreen(true);
            object    greenItem = this.obj.MModel.ToGreenValue(item);

            return(green.IndexOf(item));
        }
コード例 #3
0
ファイル: MutableModel.cs プロジェクト: Anjireddy4246/meta-cs
        internal GreenList GetGreenList(ObjectId oid, ModelProperty property, bool lazyEval)
        {
            Debug.Assert(property.IsCollection);
            object value = null;

            if (!lazyEval)
            {
                return(this.GetGreenList(oid, property));
            }
            GreenModelUpdateContext ctx = null;

            try
            {
                var slot = oid.Descriptor.GetSlot(property);
                do
                {
                    ctx   = this.BeginUpdate();
                    value = ctx.Updater.GetValue(this.id, oid, slot, true);
                } while (!this.EndUpdate(ctx));
                GreenList result = value as GreenList;
                if (result == null)
                {
                    result = property.IsUnique ? GreenList.EmptyUnique : GreenList.EmptyNonUnique;
                }
                return(result);
            }
            finally
            {
                this.FinalizeUpdate(ctx);
            }
        }
コード例 #4
0
        private GreenList CollectBases(ObjectId oid)
        {
            GreenList result = GreenList.EmptyUnique;

            foreach (var prop in this.MProperties(oid))
            {
                if (prop.IsBaseScope)
                {
                    if (prop.IsCollection)
                    {
                        var items = this.GetGreenValue(oid, prop) as GreenList;
                        if (items != null)
                        {
                            result = result.AddRange(items);
                        }
                    }
                    else
                    {
                        var item = this.GetGreenValue(oid, prop);
                        result = result.Add(item);
                    }
                }
            }
            return(result);
        }
コード例 #5
0
        internal ImmutableModelList <ImmutableObject> MGetMembers(ObjectId oid)
        {
            GreenList result = GreenList.EmptyUnique;

            foreach (var prop in this.MProperties(oid))
            {
                if (prop.CanResolve)
                {
                    if (prop.IsCollection)
                    {
                        var items = this.GetGreenValue(oid, prop) as GreenList;
                        if (items != null)
                        {
                            result = result.AddRange(items);
                        }
                    }
                    else
                    {
                        var item = this.GetGreenValue(oid, prop);
                        result = result.Add(item);
                    }
                }
            }
            return(ImmutableModelList <ImmutableObject> .FromGreenList(result, this, oid));
        }
コード例 #6
0
        internal ImmutableModelList <ImmutableObject> MGetBases(ObjectId oid)
        {
            GreenList result = this.CollectBases(oid);

            result = result.Remove(oid);
            return(ImmutableModelList <ImmutableObject> .FromGreenList(result, this, oid));
        }
コード例 #7
0
        internal ImmutableModelList <ImmutableObject> MGetAllBases(ObjectId oid)
        {
            GreenList result = GreenList.EmptyUnique;

            this.CollectAllBases(oid, ref result);
            result = result.Remove(oid);
            return(ImmutableModelList <ImmutableObject> .FromGreenList(result, this, oid));
        }
コード例 #8
0
        public override IEnumerator <T> GetEnumerator()
        {
            MutableModel model = this.obj.MModel;
            GreenList    green = this.GetGreen(true);

            foreach (var greenValue in green)
            {
                yield return((T)model.ToRedValue(greenValue, this.obj.MId));
            }
        }
コード例 #9
0
        public override void CopyTo(T[] array, int arrayIndex)
        {
            MutableModel model = this.obj.MModel;
            GreenList    green = this.GetGreen(true);

            for (int i = 0; i < green.Count && arrayIndex + i < array.Length; i++)
            {
                array[arrayIndex + i] = (T)model.ToRedValue(green[i], this.obj.MId);
            }
        }
コード例 #10
0
 public override T this[int index]
 {
     get
     {
         GreenList green = this.GetGreen(false);
         return((T)this.obj.MModel.ToRedValue(green[index], this.obj.MId));
     }
     set
     {
         this.obj.MModel.ReplaceItem(this.obj.MId, this.slot.EffectiveProperty, index, value, this.obj.MIsBeingCreated);
     }
 }
コード例 #11
0
        private void CollectAllBases(ObjectId oid, ref GreenList result)
        {
            if (oid == null)
            {
                return;
            }

            var oldResult = result;

            result = result.Add(oid);
            if (result == oldResult)
            {
                return;
            }

            var bases = this.CollectBases(oid);

            foreach (var item in bases)
            {
                this.CollectAllBases(item as ObjectId, ref result);
            }
        }
コード例 #12
0
 internal static ImmutableModelList <T> FromGreenList(GreenList green, MutableModel model, ObjectId context)
 {
     return(new ImmutableModelListFromGreenListMutable <T>(green, model, context));
 }
コード例 #13
0
 internal ImmutableModelListFromGreenListMutable(GreenList green, MutableModel model, ObjectId context)
 {
     this.green   = green;
     this.model   = model;
     this.context = context;
 }