コード例 #1
0
            /// <summary>
            /// Expand description
            /// </summary>
            /// <param name="levels">levels</param>
            /// <param name="expandUnanswered">expandUnanswered</param>
            public void Expand(int levels, bool expandUnanswered)
            {
                Debug.Assert(levels > 0);
                if (levels <= 0)
                {
                    return;                              // nothing to do -- unexpected
                }
                if (!expandUnanswered && !IsAnswered && !HasChildren)
                {
                    return;                     // don't waste memory by pushing down unanswered values to the next level unnecessarily
                }
                if (_children == null)
                {
                    // we may be expanding an Answered node or an Unanswered node here
                    if (IsAnswered)
                    {
                        _children = new ValueNodeList <T>(1);
                        // push current value down to first child
                        _children.PrepareForIndex(0);
                        (_children[0] as ValueNode <T>).Value = _value;
                        _value = default(T); // this node becomes unanswered
                    }
                    else                     // not answered
                    {
                        Debug.Assert(expandUnanswered);
                        _children = new ValueNodeList <T>();
                    }
                    --levels;
                }
                else
                {
                    // children already exist
                    Debug.Assert(!IsAnswered);
                }

                if (levels == 0)                // we're done;
                {
                    return;                     // drop out of recursion
                }
                // recurse into child nodes
                foreach (ValueNode <T> child in _children)
                {
                    child.Expand(levels, expandUnanswered);
                }
            }
コード例 #2
0
 /// <summary>
 /// ValueNode constructor
 /// </summary>
 /// <param name="value">value</param>
 public ValueNode(T value)
 {
     _value    = value;
     _children = null;
 }
コード例 #3
0
 /// <summary>
 /// ValueNode constructor
 /// </summary>
 public ValueNode()
 {
     _value    = default(T);
     _children = null;
 }