//===-- core/MessageHandler.cpp ---------------------------------*- C++ -*-===//
//
//                                 The RoSA Framework
//
//===----------------------------------------------------------------------===//
///
/// \file core/MessageHandler.cpp
///
/// \author David Juhasz (david.juhasz@tuwien.ac.at)
///
/// \date 2017
///
/// \brief Implementation of rosa/core/MessageHandler.hpp.
///
//===----------------------------------------------------------------------===//

#include "rosa/core/MessageHandler.hpp"

#include <algorithm>

namespace rosa {

MessageHandler::~MessageHandler(void) {
  LOG_TRACE("Destroying MessageHandler");
}

bool MessageHandler::canHandle(const Message &Msg) const noexcept {
  return std::any_of(Invokers.begin(), Invokers.end(),
                     [&Msg](const invoker_t &I) { return I->match(Msg); });
}

bool MessageHandler::operator()(const Message &Msg) const noexcept {
  return std::any_of(Invokers.begin(), Invokers.end(),
                     [&Msg](const invoker_t &I) {
                       return (*I)(Msg) == Invoker::result_t::Invoked;
                     });
}

} // End namespace rosa
