StepperConcept for single and multi component stepping
The current StepperConcept.hpp
is only fulfilled for e.g. the EigenStepper
as it checks the existence for certain member variable in the EigenStepper::State
which can be modified in the ActionList
elements. Since the MultiComponentStepper
has a different storage type for its components in the state the concept is not fulfilled anymore. In order to generalize the concept idea to work on both classes of stepping a couple of changes require to be done:
-
Identify which assertion tests would differ in both scenarios -
Split the concept into 3 different concepts: 1. StepperConcept: A list of assertions which should be fulfilled by all steppers 2. SingleComponentStepperConcept: Assertions which are only fulfilled by a single component stepper 3. MultiComponentStepperConcept: Assertions which are only fulfilled by a multi component stepper
At that point one requires that given a certain stepper a specific ActionList
or AbortList
fulfills a either the 1. and 2. or the 1. and 3. concept (depending on the stepper). Note: These are the only parts of the whole propagation that explicitly access these members in order to modify them outside of the stepper itself. So this requires to test each element of these lists.
-
Depending on the used stepper the ActionList
and theAbortList
should test each element on the correct application. This check should remain static and be performed by theActionList
and theAbortList
without any possible work-around. -
Merge single and multi component actors and aborters into combined actors and aborters. The steering of the right access can then be provided e.g. by std::enable_if
checks with underlyingstd::true_type
andstd::false_type
which is provided in dependence of the steppers and known at compile time.
This implementation would lead to a consistent implementation and allows to switch the stepper without changing these lists (assuming these are declared as "valid" for certain stepper types).
Note: This is only the road map for the stepper. Actually at the current code we find multiple locations (e.g. B-field) where template parameters are used and certain member variables and functions are used without checking the actual existence of them. So there exists a followup checkbox:
-
Implement concepts for other template parameters like for the stepper