private void AddChildStates(IReadOnlyNodeStateList stateList, IReadOnlyNodeState state)
        {
            stateList.Add(state);

            foreach (KeyValuePair <string, IReadOnlyInner> Entry in state.InnerTable)
            {
                AddChildInner(stateList, Entry.Value);
            }
        }
        /// <summary>
        /// Returns a list of states for all child nodes.
        /// </summary>
        public IReadOnlyNodeStateReadOnlyList GetAllChildren()
        {
            IReadOnlyNodeStateList StateList = CreateNodeStateList();

            AddChildStates(StateList, this);

            DebugObjects.AddReference(StateList);

            return(StateList.ToReadOnly());
        }
        private void AddChildInner(IReadOnlyNodeStateList stateList, IReadOnlyInner inner)
        {
            bool IsHandled = false;

            switch (inner)
            {
            case IReadOnlyPlaceholderInner AsPlaceholderInner:
                AddChildStates(stateList, AsPlaceholderInner.ChildState);
                IsHandled = true;
                break;

            case IReadOnlyOptionalInner AsOptionalInner:
                if (AsOptionalInner.IsAssigned)
                {
                    AddChildStates(stateList, AsOptionalInner.ChildState);
                }
                IsHandled = true;
                break;

            case IReadOnlyListInner AsListInner:
                foreach (IReadOnlyNodeState ChildState in AsListInner.StateList)
                {
                    AddChildStates(stateList, ChildState);
                }
                IsHandled = true;
                break;

            case IReadOnlyBlockListInner AsBlockListInner:
                foreach (IReadOnlyBlockState Block in AsBlockListInner.BlockStateList)
                {
                    stateList.Add(Block.PatternState);
                    stateList.Add(Block.SourceState);

                    foreach (IReadOnlyNodeState ChildState in Block.StateList)
                    {
                        AddChildStates(stateList, ChildState);
                    }
                }
                IsHandled = true;
                break;
            }

            Debug.Assert(IsHandled);
        }
Esempio n. 4
0
 public ReadOnlyNodeStateReadOnlyList(IReadOnlyNodeStateList list)
     : base(list)
 {
 }