/*******************************************************************************
 *
 * File:     MessageHandler.cpp
 *
 * Contents: Implementation of non-template part of MessageHandler.
 *
 * Copyright 2017
 *
 * Author: David Juhasz (david.juhasz@tuwien.ac.at)
 *
 ******************************************************************************/

#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

