/// <summary> /// Resets this node, all siblings and all children. /// </summary> internal void Reset() { _numberOfRecursions = 0; Count = 0; Sum = TimeSpan.Zero; Minimum = TimeSpan.Zero; Maximum = TimeSpan.Zero; if (FirstChild != null) { FirstChild.Reset(); } if (NextSibling != null) { NextSibling.Reset(); } }
protected virtual void Dispose(bool disposing) { RemotingServices.Disconnect(this); FirstChild?.Dispose(); NextSibling?.Dispose(); FirstChild = NextSibling = ParentNode = PreviousSibling = null; if (itemsToDispose != null) { foreach (var properties in itemsToDispose) { properties.Dispose(); } itemsToDispose = null; } }
/// <summary> /// Dumps this instance to <see cref="TextWriter"/>. /// </summary> /// <param name="writer">The writer.</param> /// <param name="level">The level of indent.</param> /// <exception cref="System.ArgumentNullException">if writer is null</exception> public void DumpTo(TextWriter writer, int level) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } for (int i = 0; i < level; i++) { writer.Write(' '); } writer.WriteLine("-> " + this.GetType().Name + " = " + this); DumpChildTo(writer, level + 1); if (NextSibling != null) { NextSibling.DumpTo(writer, level); } }
internal int Deduplicate(Dictionary <BuildNode, BuildNode> canonicalNodes) { /* * if(Path == "ziegc") { * Console.WriteLine($"Here! {Path}"); * } */ var processed = 1; if (FirstChild != null) { if (canonicalNodes.ContainsKey(FirstChild)) { FirstChild = canonicalNodes[FirstChild]; } else { canonicalNodes[FirstChild] = FirstChild; processed += FirstChild.Deduplicate(canonicalNodes); } } if (NextSibling != null) { if (canonicalNodes.ContainsKey(NextSibling)) { NextSibling = canonicalNodes[NextSibling]; } else { canonicalNodes[NextSibling] = NextSibling; processed += NextSibling.Deduplicate(canonicalNodes); } } return(processed); }