private SignatureTreeItem GetSignatureTreeViewItem(string leaderSignature)
{
var signatureTreeItems = new List<SignatureTreeItem>();
var workSignatureTreeItems = new List<SignatureTreeItem>();
var checkedSignatures = new HashSet<string>();
var workCheckedSignatures = new HashSet<string>();
{
LinkItem leaderLinkItem;
if (!_cache_LinkItems.TryGetValue(leaderSignature, out leaderLinkItem)) return null;
signatureTreeItems.Add(new SignatureTreeItem(leaderLinkItem));
checkedSignatures.Add(leaderSignature);
}
{
int index = 0;
for (;;)
{
for (; index < signatureTreeItems.Count && index < 32 * 1024; index++)
{
var sortedList = signatureTreeItems[index].LinkItem.TrustSignatures.ToList();
sortedList.Sort();
foreach (var trustSignature in sortedList)
{
if (checkedSignatures.Contains(trustSignature)) continue;
LinkItem tempLinkItem;
if (!_cache_LinkItems.TryGetValue(trustSignature, out tempLinkItem)) continue;
var tempTreeItem = new SignatureTreeItem(tempLinkItem);
signatureTreeItems[index].Children.Add(tempTreeItem);
workSignatureTreeItems.Add(tempTreeItem);
workCheckedSignatures.Add(trustSignature);
}
}
if (workSignatureTreeItems.Count == 0) break;
signatureTreeItems.AddRange(workSignatureTreeItems);
workSignatureTreeItems.Clear();
checkedSignatures.UnionWith(workCheckedSignatures);
workCheckedSignatures.Clear();
}
}
return signatureTreeItems[0];
}