static public LinkModel CreateLinkModel(Link link, int nestingLevel = 3) { LinkModel result = null; //ThreadHelpers.SyncInvokeWithExtendedStack(() => //{ int currentLevel = 0; HashSet <Link> visitedLinks = new HashSet <Link>(); result = CreateLinkModel(link, visitedLinks, currentLevel, nestingLevel); //}); return(result); }
static private LinkModel CreateLinkModel(Link link, HashSet <Link> visitedLinks, int currentLevel, int maxLevel) { LinkModel model = new LinkModel(link); if (currentLevel < maxLevel) { if (currentLevel == 0 || link.TotalReferers < 10) { currentLevel++; link.WalkThroughReferers((referer) => { if (link != referer && visitedLinks.Add(referer)) { model.ReferersModels.Add(CreateLinkModel(referer, visitedLinks, currentLevel, maxLevel)); } }); model.ReferersModels.Sort((x, y) => x.Link.GetPointer().ToInt64().CompareTo(y.Link.GetPointer().ToInt64())); } } return(model); }