//===-- rosa/deluxe/DeluxeAtoms.hpp -----------------------------*- C++ -*-===//
//
//                                 The RoSA Framework
//
// Distributed under the terms and conditions of the Boost Software License 1.0.
// See accompanying file LICENSE.
//
// If you did not receive a copy of the license file, see
// http://www.boost.org/LICENSE_1_0.txt.
//
//===----------------------------------------------------------------------===//
///
/// \file rosa/deluxe/DeluxeAtoms.hpp
///
/// \author David Juhasz (david.juhasz@tuwien.ac.at)
///
/// \date 2017-2019
///
/// \brief Definition of \c rosa::AtomValue values and \c rosa::AtomConstant
/// types for the implementation of the *deluxe interface*.
///
//===----------------------------------------------------------------------===//

#ifndef ROSA_DELUXE_DELUXEATOMS_HPP
#define ROSA_DELUXE_DELUXEATOMS_HPP

#include "rosa/support/atom.hpp"

namespace rosa {
namespace deluxe {

/// Contains some definitions used in the implementation of the *deluxe
/// interface* to denote various roles and events
///
/// \see \c rosa::deluxe::DeluxeContext
///
/// \note Do not apply `using namespace` to this namespace as that may result in
/// some identifiers in the original namespace being hidden by those of
/// \c rosa::deluxe::atoms.
namespace atoms {

/// Value to be used as the *kind* of \c rosa::deluxe::DeluxeSensor.
///
/// \see \c rosa::Unit::Kind
constexpr AtomValue SensorKind = atom("dl_sensor");

/// Value to be used as the *kind* of \c rosa::deluxe::DeluxeAgent.
///
/// \see \c rosa::Unit::Kind
constexpr AtomValue AgentKind = atom("dl_agent");

/// Type alias denoting system trigger messages.
using Trigger = AtomConstant<atom("dl_trigger")>;

/// Type alias denoting messages from a slave.
using Slave = AtomConstant<atom("dl_slave")>;

/// Type alias denoting messages from a master.
using Master = AtomConstant<atom("dl_master")>;

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

#endif // ROSA_DELUXE_DELUXEATOMS_HPP
