private protected virtual void ExecuteRemoveBlockView(WriteableRemoveBlockViewOperation operation) { Node ParentNode = operation.ParentNode; string PropertyName = operation.PropertyName; IWriteableBlockListInner <IWriteableBrowsingBlockNodeIndex> Inner = GetInner(ParentNode, PropertyName) as IWriteableBlockListInner <IWriteableBrowsingBlockNodeIndex>; IWriteableBlockState RemovedBlockState = (IWriteableBlockState)Inner.BlockStateList[operation.BlockIndex]; for (int Index = 0; Index < RemovedBlockState.StateList.Count; Index++) { IWriteableNodeState State = (IWriteableNodeState)RemovedBlockState.StateList[Index]; PruneState(State); Stats.PlaceholderNodeCount--; } IWriteableBrowsingPatternIndex PatternIndex = RemovedBlockState.PatternIndex; IWriteableBrowsingSourceIndex SourceIndex = RemovedBlockState.SourceIndex; Debug.Assert(PatternIndex != null); Debug.Assert(StateTable.ContainsKey(PatternIndex)); Debug.Assert(SourceIndex != null); Debug.Assert(StateTable.ContainsKey(SourceIndex)); RemoveState(PatternIndex); Stats.PlaceholderNodeCount--; RemoveState(SourceIndex); Stats.PlaceholderNodeCount--; Inner.NotifyBlockStateRemoved(RemovedBlockState); Stats.BlockCount--; operation.Update(RemovedBlockState); NotifyBlockViewRemoved(operation); }
private protected virtual void ExecuteInsertNewBlock(IWriteableInsertBlockOperation operation) { Node ParentNode = operation.ParentNode; string PropertyName = operation.PropertyName; IWriteableBlockListInner <IWriteableBrowsingBlockNodeIndex> Inner = GetInner(ParentNode, PropertyName) as IWriteableBlockListInner <IWriteableBrowsingBlockNodeIndex>; Inner.InsertNewBlock(operation); IWriteableBrowsingExistingBlockNodeIndex BrowsingIndex = operation.BrowsingIndex; IWriteableBlockState BlockState = operation.BlockState; IWriteablePlaceholderNodeState ChildState = operation.ChildState; Debug.Assert(BlockState.StateList.Count == 1); Debug.Assert(BlockState.StateList[0] == ChildState); ((IWriteableBlockState <IWriteableInner <IWriteableBrowsingChildIndex> >)BlockState).InitBlockState(); Stats.BlockCount++; IWriteableBrowsingPatternIndex PatternIndex = BlockState.PatternIndex; IWriteablePatternState PatternState = BlockState.PatternState; AddState(PatternIndex, PatternState); Stats.PlaceholderNodeCount++; IWriteableBrowsingSourceIndex SourceIndex = BlockState.SourceIndex; IWriteableSourceState SourceState = BlockState.SourceState; AddState(SourceIndex, SourceState); Stats.PlaceholderNodeCount++; AddState(BrowsingIndex, ChildState); Stats.PlaceholderNodeCount++; BuildStateTable(Inner, null, BrowsingIndex, ChildState); Debug.Assert(Contains(BrowsingIndex)); NotifyBlockStateInserted(operation); }
private protected virtual void ExecuteRemoveBlock(IWriteableRemoveBlockOperation operation) { Node ParentNode = operation.ParentNode; string PropertyName = operation.PropertyName; IWriteableBlockListInner <IWriteableBrowsingBlockNodeIndex> Inner = GetInner(ParentNode, PropertyName) as IWriteableBlockListInner <IWriteableBrowsingBlockNodeIndex>; Inner.RemoveWithBlock(operation); IWriteableBlockState RemovedBlockState = operation.BlockState; Debug.Assert(RemovedBlockState != null); IWriteableBrowsingPatternIndex PatternIndex = RemovedBlockState.PatternIndex; IWriteableBrowsingSourceIndex SourceIndex = RemovedBlockState.SourceIndex; Debug.Assert(PatternIndex != null); Debug.Assert(StateTable.ContainsKey(PatternIndex)); Debug.Assert(SourceIndex != null); Debug.Assert(StateTable.ContainsKey(SourceIndex)); Stats.BlockCount--; RemoveState(PatternIndex); Stats.PlaceholderNodeCount--; RemoveState(SourceIndex); Stats.PlaceholderNodeCount--; IWriteableNodeState RemovedState = operation.RemovedState; Debug.Assert(RemovedState != null); PruneState(RemovedState); Stats.PlaceholderNodeCount--; NotifyBlockStateRemoved(operation); }
/// <summary> /// Initializes a new instance of the <see cref="WriteableSourceState{IInner}"/> class. /// </summary> /// <param name="parentBlockState">The parent block state.</param> /// <param name="index">The index used to create the state.</param> public WriteableSourceState(IWriteableBlockState parentBlockState, IWriteableBrowsingSourceIndex index) : base(parentBlockState, index) { }