EdgeRuleBase
in package
Whether the edges a flow may traverse are limited to the ones declared by edge rules.
The same "stated, not inferred" argument as SlotRuleBase, applied to topology rather than
to the slot set. A movement step names a from and a to pattern, and those patterns can always
express a pair the modeller never sanctioned; whether that pair is a legal movement is a question
about the space, not about the step, so the space has to answer it — and has to say which answer
it is giving.
Table of Contents
Cases
- All
- Any pair the step's patterns can express is traversable; edge rules label, annotate and deny.
- None
- Only declared edges are traversable; a `move()` over an undeclared pair moves nothing.
Cases
All
Any pair the step's patterns can express is traversable; edge rules label, annotate and deny.
The default, and what a space that declares no topology has always meant. Declaring rules
under this base still buys labeled steps (Flow::stepByLabeledEdges)
and the metadata the timed layer reads, but it does not constrain move().
None
Only declared edges are traversable; a `move()` over an undeclared pair moves nothing.
The base that makes "an edge is an allowed movement" true. Worth stating wherever the legal transitions are part of the domain rather than an implementation detail — an unsanctioned path then becomes a refusal at execution instead of a movement someone has to notice afterwards.
Boundary movements are exempt: a step into or out of the nil slot — create() and
destroy() — is never constrained by this base, for the same reason the nil slot survives
any SlotRuleBase. It is the outside of the space, not a member of it, so no topology
rule describes it.