예제 #1
0
        /// <summary>return false if class not completely initialized, otherwise true</summary>
        internal virtual bool ContinueSet(Transaction trans, IUpdateDepth
                                          updateDepth)
        {
            if (!BitIsTrue(Const4.Continue))
            {
                return(true);
            }
            if (!_class.StateOK())
            {
                return(false);
            }
            if (!_class.AspectsAreInitialized())
            {
                return(false);
            }
            if (DTrace.enabled)
            {
                DTrace.Continueset.Log(GetID());
            }
            BitFalse(Const4.Continue);
            var context = new MarshallingContext(trans, this, updateDepth, true
                                                 );

            Handlers4.Write(ClassMetadata().TypeHandler(), context, GetObject());
            var pointer   = context.AllocateSlot();
            var buffer    = context.ToWriteBuffer(pointer);
            var container = trans.Container();

            container.WriteNew(trans, pointer, _class, buffer);
            var obj = _object;

            ObjectOnNew(trans, obj);
            if (_class.HasIdentity())
            {
                _object = container.NewWeakReference(this, obj);
            }
            SetStateClean();
            EndProcessing();
            return(true);
        }