#ifndef SRC_TIME_STEPPING_UNIFORMTIMESTEPPER_HH
#define SRC_TIME_STEPPING_UNIFORMTIMESTEPPER_HH

#include "../spatial-solving/fixedpointiterator.hh"
#include "adaptivetimestepper.hh"
#include "stepbase.hh"

template <class Factory, class ContactNetwork, class Updaters, class ErrorNorms>
class UniformTimeStepper {

  using UpdatersWithCount = UpdatersWithCount<Updaters>;
  using StepBase = StepBase<Factory, ContactNetwork, Updaters, ErrorNorms>;

public:
  UniformTimeStepper(const StepBase& stepBase,
                      ContactNetwork& contactNetwork,
                      Updaters &current,
                      double relativeTime,
                      double relativeTau);

  bool reachedEnd();

  IterationRegister advance();

  double relativeTime_;
  const double relativeTau_;

private:
  const StepBase& stepBase_;
  ContactNetwork& contactNetwork_;

  Updaters &current_;

  IterationRegister iterationRegister_;
};

#endif