Referencing Algorithms

Use this page whenever you need to point to a specific algorithm in:

  • Route(...)
  • Share(...)
  • Input(...)
  • Override(...)

One Rule

Reference algorithms the same way you inserted them into the composition.

  • Added by type -> reference by that type.
  • Added by saved instance variable -> reference by that same variable.
  • Added by Unique(...) -> reference by that same saved unique variable.

Pattern 1: Added by Type

struct Producer <: ProcessAlgorithm end
struct Consumer <: ProcessAlgorithm end

algo = CompositeAlgorithm(
    Producer, Consumer,
    (1, 1),
    Route(Producer => Consumer, :value),
)

Use Producer and Consumer again when targeting these algorithms.

Pattern 2: Added by Instance

producer = Producer()
consumer = Consumer()

algo = CompositeAlgorithm(
    producer, consumer,
    (1, 1),
    Route(producer => consumer, :value),
)

Use producer and consumer again, not fresh Producer() calls.

Pattern 3: Added with Unique

producer_a = Producer()
producer_b = Unique(Producer())
consumer = Consumer()

algo = CompositeAlgorithm(
    producer_a, producer_b, consumer,
    (1, 1, 1),
    Route(producer_b => consumer, :value),
)

producer_b is a distinct identity. Keep that variable and reuse it anywhere you need to target that exact algorithm.

Common Mistake

Do not create a new object in Route/Share/Input/Override unless that exact object was inserted in the composition.

Some immutable objects can match by equal value, but relying on that makes code harder to read. Reusing the original reference is the clearest rule.