public static Link[] GetRightElements(Link startLink, Link rightLink) { var result = new Link[4]; TryStepRight(startLink, rightLink, result, 0); startLink.WalkThroughReferersByTarget(couple => { if (couple.Linker == Net.And) if (TryStepRight(couple, rightLink, result, 2)) return Link.Stop; return Link.Continue; }); return result; }
public static bool TryStepLeft(Link startLink, Link leftLink, Link[] result, int offset) { int added = 0; startLink.WalkThroughReferersByTarget(couple => { if (couple.Linker == Net.And) { var coupleSource = couple.Source; if (coupleSource == leftLink) { result[offset] = couple; if (++added == 2) return Link.Stop; } else if (coupleSource.Linker == Net.And && coupleSource.Target == leftLink) { result[offset + 1] = couple; if (++added == 2) return Link.Stop; } } return Link.Continue; }); return added > 0; }