Show / Hide Table of Contents

    Class StopableSequenceWalker

    Inheritance
    Object
    StopableSequenceWalker
    Inherited Members
    Object.Equals(Object)
    Object.Equals(Object, Object)
    Object.GetHashCode()
    Object.GetType()
    Object.MemberwiseClone()
    Object.ReferenceEquals(Object, Object)
    Object.ToString()
    Namespace: Platform.Data.Sequences
    Assembly: Platform.Data.Sequences.dll
    Syntax
    public static class StopableSequenceWalker
    Remarks

    Реализованный внутри алгоритм наглядно показывает, что совершенно не обязательна рекурсивная реализация (с вложенным вызовом функцией самой себя), так как стэк можно использовать намного эффективнее при ручном управлении.

    Решить объединять ли логику в одну функцию, или оставить 4 отдельных реализации? Решить встраивать ли защиту от зацикливания. Альтернативой защиты от закливания может быть заранее известное ограничение на погружение вглубь. А так же качественное распознавание прохода по циклическому графу. Ограничение на уровень глубины рекурсии может позволить использовать уменьшенный размер стека. Можно использовать глобальный стек (или несколько глобальных стеков на каждый поток).

    Methods

    | Improve this Doc View Source

    WalkLeft<TLinkAddress>(TLinkAddress, Func<TLinkAddress, TLinkAddress>, Func<TLinkAddress, TLinkAddress>, Func<TLinkAddress, Boolean>, Func<TLinkAddress, Boolean>)

    Declaration
    public static bool WalkLeft<TLinkAddress>(TLinkAddress sequence, Func<TLinkAddress, TLinkAddress> getSource, Func<TLinkAddress, TLinkAddress> getTarget, Func<TLinkAddress, bool> isElement, Func<TLinkAddress, bool> visit)
    Parameters
    Type Name Description
    TLinkAddress sequence
    Func<TLinkAddress, TLinkAddress> getSource
    Func<TLinkAddress, TLinkAddress> getTarget
    Func<TLinkAddress, Boolean> isElement
    Func<TLinkAddress, Boolean> visit
    Returns
    Type Description
    Boolean
    Type Parameters
    Name Description
    TLinkAddress
    | Improve this Doc View Source

    WalkRight<TLinkAddress>(TLinkAddress, Func<TLinkAddress, TLinkAddress>, Func<TLinkAddress, TLinkAddress>, Func<TLinkAddress, Boolean>, Action<TLinkAddress>, Action<TLinkAddress>, Func<TLinkAddress, Boolean>, Func<TLinkAddress, Boolean>)

    Declaration
    public static bool WalkRight<TLinkAddress>(TLinkAddress sequence, Func<TLinkAddress, TLinkAddress> getSource, Func<TLinkAddress, TLinkAddress> getTarget, Func<TLinkAddress, bool> isElement, Action<TLinkAddress> enter, Action<TLinkAddress> exit, Func<TLinkAddress, bool> canEnter, Func<TLinkAddress, bool> visit)
    Parameters
    Type Name Description
    TLinkAddress sequence
    Func<TLinkAddress, TLinkAddress> getSource
    Func<TLinkAddress, TLinkAddress> getTarget
    Func<TLinkAddress, Boolean> isElement
    Action<TLinkAddress> enter
    Action<TLinkAddress> exit
    Func<TLinkAddress, Boolean> canEnter
    Func<TLinkAddress, Boolean> visit
    Returns
    Type Description
    Boolean
    Type Parameters
    Name Description
    TLinkAddress
    | Improve this Doc View Source

    WalkRight<TLinkAddress>(TLinkAddress, Func<TLinkAddress, TLinkAddress>, Func<TLinkAddress, TLinkAddress>, Func<TLinkAddress, Boolean>, Func<TLinkAddress, Boolean>)

    Declaration
    public static bool WalkRight<TLinkAddress>(TLinkAddress sequence, Func<TLinkAddress, TLinkAddress> getSource, Func<TLinkAddress, TLinkAddress> getTarget, Func<TLinkAddress, bool> isElement, Func<TLinkAddress, bool> visit)
    Parameters
    Type Name Description
    TLinkAddress sequence
    Func<TLinkAddress, TLinkAddress> getSource
    Func<TLinkAddress, TLinkAddress> getTarget
    Func<TLinkAddress, Boolean> isElement
    Func<TLinkAddress, Boolean> visit
    Returns
    Type Description
    Boolean
    Type Parameters
    Name Description
    TLinkAddress
    • Improve this Doc
    • View Source
    Back to top Generated by DocFX