private protected virtual IReadOnlyIndexCollection BrowseNodeBlockList(IReadOnlyBrowseContext browseNodeContext, INode node, string propertyName, IReadOnlyList <INodeTreeBlock> childBlockList) { Debug.Assert(!string.IsNullOrEmpty(propertyName)); IReadOnlyBrowsingBlockNodeIndexList NodeIndexList = CreateBrowsingBlockNodeIndexList(); for (int BlockIndex = 0; BlockIndex < childBlockList.Count; BlockIndex++) { INodeTreeBlock ChildBlock = childBlockList[BlockIndex]; BrowseBlock(browseNodeContext, node, propertyName, BlockIndex, ChildBlock, NodeIndexList); } return(CreateBlockIndexCollection(browseNodeContext, propertyName, NodeIndexList)); }
private protected virtual void BrowseBlock(IReadOnlyBrowseContext browseNodeContext, INode node, string propertyName, int blockIndex, INodeTreeBlock childBlock, IReadOnlyBrowsingBlockNodeIndexList nodeIndexList) { Debug.Assert(!string.IsNullOrEmpty(propertyName)); for (int Index = 0; Index < childBlock.NodeList.Count; Index++) { INode ChildNode = childBlock.NodeList[Index]; IReadOnlyBrowsingBlockNodeIndex NewNodeIndex; if (Index == 0) // For the first node, we use a IxxxBrowsingNewBlockNodeIndex, otherwise a IxxxBrowsingExistingBlockNodeIndex. { NewNodeIndex = CreateNewBlockNodeIndex(browseNodeContext, node, propertyName, blockIndex, ChildNode); } else { NewNodeIndex = CreateExistingBlockNodeIndex(browseNodeContext, node, propertyName, blockIndex, Index, ChildNode); } nodeIndexList.Add(NewNodeIndex); } }