#ifndef _BIP_Engine_RandomScheduler_HPP_
#define _BIP_Engine_RandomScheduler_HPP_

#include "Scheduler.hpp"
#include "Compound.hpp"
#include "Engine.hpp"

class BipError;

/** \brief Compute execution sequences in which interactions
 * are chosen randomly.
 */
class RandomScheduler : public Scheduler {
 public:
  RandomScheduler(Engine &engine, bool verbose = true, bool debug = false);
  virtual ~RandomScheduler();

  virtual void run();

  bool verbose() const { return mVerbose; }
  bool debug() const { return mDebug; }


 protected:
  void handleError(BipError &error);
  void print();
  void print(const Compound &compound, string tab);

  bool mVerbose;
  bool mDebug;
};

#endif // _BIP_Engine_RandomScheduler_HPP_
