//===-- deluxe/executionpolicies/Decimation.h -------------------*- C++ -*-===//
//
//                                 The RoSA Framework
//
//===----------------------------------------------------------------------===//
///
/// \file deluxe/executionpolicies/Decimation.h
///
/// \author David Juhasz (david.juhasz@tuwien.ac.at)
///
/// \date 2019
///
/// \brief Declaration of the DeluxeExecutionPolicy Decimation.
///
//===----------------------------------------------------------------------===//

#ifndef ROSA_LIB_DELUXE_EXECUTIONPOLICIES_DECIMATION_H
#define ROSA_LIB_DELUXE_EXECUTIONPOLICIES_DECIMATION_H

#include "rosa/deluxe/DeluxeExecutionPolicy.h"

namespace rosa {
namespace deluxe {

class Decimation : public DeluxeExecutionPolicy {
  const size_t Rate;

  size_t Cycle;

public:
  Decimation(const size_t D);

  bool canHandle(const AgentHandle H, const DeluxeSystem &S) const
      noexcept override;

  bool doExecute(const std::vector<bool> &InputChanged) noexcept override;

  std::string dump(void) const noexcept override;
};

} // End namespace deluxe
} // End namespace rosa

#endif // ROSA_LIB_DELUXE_EXECUTIONPOLICIES_DECIMATION_H
