public static LinkCombination Clone(LinkCombination linkCombination) { LinkCombination newLinkCombination = new LinkCombination(); newLinkCombination.CombinationNo = linkCombination.CombinationNo; Link newLink; foreach (Link link in linkCombination.Links) { newLink = Link.Clone(link); newLinkCombination.Links.Add(newLink); } return newLinkCombination; }
private void CombinateLinks(List<LinkCombination> combinations, List<Link> midLinks, Link curLink) { if (curLink.NextLinks == null || curLink.NextLinks.Count == 0) { LinkCombination combination = new LinkCombination(); foreach (Link link in midLinks) combination.Links.Add(link); combination.Links.Add(curLink); combinations.Add(combination); } else { foreach (Link link in curLink.NextLinks) { if (link.NextLinks != null && link.NextLinks.Count > 0) midLinks.Add(link); CombinateLinks(combinations, midLinks, link); if (link.NextLinks != null && link.NextLinks.Count > 0) midLinks.Remove(link); } } }
private List<LinkCombination> GetResultCombinations(LinkCombination linkCombination) { List<LinkCombination> combinations = new List<LinkCombination>(); List<Link.Channel> channels; string masks; bool isValidLinkCombination; LinkCombination newLinkCombination; foreach (List<string> directionMasks in mAllCombinationDirectionMasks) { isValidLinkCombination = true; for(int i = 0; i < linkCombination.Links.Count; i++) { masks = directionMasks[i]; channels = linkCombination.Links[i].Channels; for (int j = 0; j < masks.Length; j++) channels[j].Result = (masks[j] == '1') ? "V":"H"; if (!IsLinkAllDirectionMatched(linkCombination.Links[i])) { isValidLinkCombination = false; break; } } if (isValidLinkCombination) { newLinkCombination = LinkCombination.Clone(linkCombination); combinations.Add(newLinkCombination); } } return combinations; }