Bertini 2 d882924 (2026-10-06 19:56 UTC)
Numerical algebraic geometry library (C++ core)
Loading...
Searching...
No Matches
bertini::MultiObserver< ObservedT, ObserverTypes > Class Template Reference

A class which can glob together observer types into a new, single observer type. More...

#include <observer.hpp>

Inheritance diagram for bertini::MultiObserver< ObservedT, ObserverTypes >:
[legend]
Collaboration diagram for bertini::MultiObserver< ObservedT, ObserverTypes >:
[legend]

Public Member Functions

ObserveResult Observe (AnyEvent const &e) override
 Observe override which calls the overrides for the types you glued together.
virtual ~MultiObserver ()=default
std::type_index ObservedKind () const override
 The type this observer expects to observe.
virtual std::vector< std::type_index > SubscribedEventTypes () const
 Declares which event types this observer wants to receive.

Public Attributes

std::tuple< ObserverTypes< ObservedT >... > observers_
 The held sub-observers, one per observer type.

Detailed Description

template<class ObservedT, template< class > class... ObserverTypes>
class bertini::MultiObserver< ObservedT, ObserverTypes >

A class which can glob together observer types into a new, single observer type.

If there are pre-existing observers for the object you wish to observe, rather than making one of each, and attaching each to the observable, you can make many things one.

https://frinkiac.com/?q=many%20guns%20into%20five

Template Parameters
ObservedTThe type of thing the observer types you are gluing together observe. They must all observe the same type of object.
ObserverTypesThe already-existing observer types you are gluing together. You can put as many of them together as you want!

Constructor & Destructor Documentation

◆ ~MultiObserver()

template<class ObservedT, template< class > class... ObserverTypes>
virtual bertini::MultiObserver< ObservedT, ObserverTypes >::~MultiObserver ( )
virtualdefault

Member Function Documentation

◆ Observe()

template<class ObservedT, template< class > class... ObserverTypes>
ObserveResult bertini::MultiObserver< ObservedT, ObserverTypes >::Observe ( AnyEvent const & e)
inlineoverridevirtual

Observe override which calls the overrides for the types you glued together.

The bundle keeps observing as long as at least one of its children still wants events; it asks to unsubscribe only once every glued-in observer has returned Unsubscribe.

Parameters
eThe emitted event which caused observation.

Implements bertini::AnyObserver.

◆ ObservedKind()

template<class ObservedT>
std::type_index bertini::Observer< ObservedT >::ObservedKind ( ) const
inlineoverridevirtualinherited

The type this observer expects to observe.

Used by Observable::AddObserver to reject attaching an observer to an incompatible observable (which would otherwise silently never fire). The default is typeid(void), a wildcard meaning "attach me anywhere"; Observer<ObservedT> reports typeid(ObservedT).

Reimplemented from bertini::AnyObserver.

◆ SubscribedEventTypes()

virtual std::vector< std::type_index > bertini::AnyObserver::SubscribedEventTypes ( ) const
inlinevirtualinherited

Declares which event types this observer wants to receive.

Return a non-empty vector to opt into type-indexed dispatch: the observable will only call Observe() for events whose dynamic type exactly matches one of the returned type_index values. Return an empty vector (the default) to receive every event — this is the correct choice for observers that handle many or all event types, and is the automatic behavior for Python-defined observers.

Reimplemented in bertini::TypedObserver< Derived, ObservedT, ConcreteEvents >, bertini::TypedObserver< AMPPathAccumulator< TrackerT, SuccessfulStep >, TrackerT, SuccessfulStep< TrackerTraits< TrackerT >::EventEmitterType > >, bertini::TypedObserver< FirstPrecisionRecorder< TrackerT >, TrackerT, Initializing< TrackerTraits< TrackerT >::EventEmitterType, TrackerTraits< TrackerT >::BaseComplexT >, TrackingStarted< TrackerTraits< TrackerT >::EventEmitterType >, PrecisionChanged< TrackerTraits< TrackerT >::EventEmitterType > >, bertini::TypedObserver< MinMaxPrecisionRecorder< TrackerT >, TrackerT, Initializing< TrackerTraits< TrackerT >::EventEmitterType, TrackerTraits< TrackerT >::BaseComplexT >, TrackingStarted< TrackerTraits< TrackerT >::EventEmitterType >, PrecisionChanged< TrackerTraits< TrackerT >::EventEmitterType > >, bertini::TypedObserver< PathPrecisionRecorder< TrackerT >, TrackerT, TrackingStarted< TrackerTraits< TrackerT >::EventEmitterType >, PrecisionChanged< TrackerTraits< TrackerT >::EventEmitterType > >, bertini::TypedObserver< PathPrecisionRecorder< TrackerType >, TrackerType, TrackingStarted< TrackerTraits< TrackerType >::EventEmitterType >, PrecisionChanged< TrackerTraits< TrackerType >::EventEmitterType > >, and bertini::TypedObserver< StepFailScreenPrinter< TrackerT >, TrackerT, FailedStep< TrackerTraits< TrackerT >::EventEmitterType > >.

Member Data Documentation

◆ observers_

template<class ObservedT, template< class > class... ObserverTypes>
std::tuple<ObserverTypes<ObservedT>...> bertini::MultiObserver< ObservedT, ObserverTypes >::observers_

The held sub-observers, one per observer type.