Ejemplo n.º 1
0
        public static Link[] GetLeftElements(Link startLink, Link leftLink)
        {
            var result = new Link[4];

            TryStepLeft(startLink, leftLink, result, 0);

            startLink.WalkThroughReferersBySource(couple =>
                {
                    if (couple.Linker == Net.And)
                        if (TryStepLeft(couple, leftLink, result, 2))
                            return Link.Stop;

                    return Link.Continue;
                });

            return result;
        }
        private static void RegisterExistingLetter(Link letter)
        {
            letter.WalkThroughReferersBySource(referer =>
                {
                    if (referer.Linker == Net.Has)
                    {
                        Link target = referer.Target;
                        if (target.Source == Net.Code && target.Linker == Net.ThatIsRepresentedBy)
                        {
                            char charCode = (char)LinkConverter.ToNumber(target.Target);

                            CharactersToLinks[charCode] = letter;
                            LinksToCharacters[letter] = charCode;
                        }
                    }
                });
        }
Ejemplo n.º 3
0
        public static bool TryStepRight(Link startLink, Link rightLink, Link[] result, int offset)
        {
            int added = 0;

            startLink.WalkThroughReferersBySource(couple =>
                {
                    if (couple.Linker == Net.And)
                    {
                        var coupleTarget = couple.Target;
                        if (coupleTarget == rightLink)
                        {
                            result[offset] = couple;
                            if (++added == 2)
                                return Link.Stop;
                        }
                        else if (coupleTarget.Linker == Net.And && coupleTarget.Source == rightLink)
                        {
                            result[offset + 1] = couple;
                            if (++added == 2)
                                return Link.Stop;
                        }
                    }

                    return Link.Continue;
                });

            return added > 0;
        }