|
|
virtual | ~INavigationPolicy ()=default |
| | Virtual destructor so policies can be held through this base class.
|
| virtual void | connect (NavigationDelegate &delegate) const =0 |
| | Connect a policy with a delegate (usually a member of a volume).
|
| virtual void | createState (const GeometryContext &gctx, const NavigationArguments &args, NavigationPolicyStateManager &stateManager, const Logger &logger) const |
| | Create and initialize the state for this policy.
|
| void | initializeStatelessCache (const GeometryContext &gctx, const Logger &logger=getDummyLogger()) |
| | One-time initialization step that probes whether this policy pushes only default (empty) states and caches the result (mutating internal state), allowing the navigator to skip the per-volume-entry state creation and the matching pop entirely for volumes with such policies.
|
| bool | isStateless () const |
| | Whether this policy is known to push only default (empty) states, see initializeStatelessCache.
|
| virtual bool | isValid (const GeometryContext &gctx, const NavigationArguments &args, NavigationPolicyState &state, const Logger &logger) const |
| | Check if the policy is in a valid state for navigation.
|
| virtual void | popState (NavigationPolicyStateManager &stateManager, const Logger &logger) const |
| | Remove the state for this policy from the state manager.
|
| virtual void | visit (const std::function< void(const INavigationPolicy &)> &visitor) const |
| | Convenience function to walk over all navigation policies.
|
Base class for all navigation policies.
The policy needs to be connected to a delegate via a virtual method for it to become active. The update method is not part of the class interface. The conventional updateState method is only required for use with the navigation policy factory, otherwise connect is free to connect any function.
One-time initialization step that probes whether this policy pushes only default (empty) states and caches the result (mutating internal state), allowing the navigator to skip the per-volume-entry state creation and the matching pop entirely for volumes with such policies.
This is an eager initialization (deliberately not a lazy first-call latch): it is called for all attached policies at the end of Gen3 geometry construction, once every policy is in place. It must be called again should a policy be attached after that point; an uninitialized policy conservatively reports stateful via isStateless, so skipping this step is always safe.
- Note
- This relies on the contract that the defaultness of the state a navigation policy pushes does not depend on the geometry context or the navigation arguments: a policy either always pushes a real state (it has something to validate) or always pushes the default empty state.
- Parameters
-
| gctx | The current geometry context object, e.g. alignment |
| logger | Logger for debug output |