Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of framagit.org:simgrid/simgrid
authoreazimi <azimi.ehsan@outlook.com>
Fri, 5 Feb 2021 17:14:59 +0000 (18:14 +0100)
committereazimi <azimi.ehsan@outlook.com>
Fri, 5 Feb 2021 17:14:59 +0000 (18:14 +0100)
14 files changed:
MANIFEST.in
include/simgrid/s4u/Activity.hpp
include/xbt/base.h
include/xbt/utility.hpp
src/kernel/activity/ActivityImpl.cpp
src/kernel/activity/ActivityImpl.hpp
src/kernel/activity/CommImpl.hpp
src/mc/ModelChecker.cpp
src/mc/remote/AppSide.cpp
src/mc/remote/Channel.cpp
src/mc/remote/mc_protocol.cpp [deleted file]
src/mc/remote/mc_protocol.h
src/s4u/s4u_Activity.cpp
tools/cmake/DefinePackages.cmake

index ca11dc0..3eab48a 100644 (file)
@@ -2317,7 +2317,6 @@ include src/mc/remote/CheckerSide.hpp
 include src/mc/remote/RemotePtr.hpp
 include src/mc/remote/RemoteSimulation.cpp
 include src/mc/remote/RemoteSimulation.hpp
-include src/mc/remote/mc_protocol.cpp
 include src/mc/remote/mc_protocol.h
 include src/mc/sosp/ChunkedData.cpp
 include src/mc/sosp/ChunkedData.hpp
index 22fa0a7..ab1e57b 100644 (file)
@@ -13,6 +13,7 @@
 #include <string>
 #include <vector>
 #include <xbt/signal.hpp>
+#include <xbt/utility.hpp>
 
 XBT_LOG_EXTERNAL_CATEGORY(s4u_activity);
 
@@ -69,7 +70,8 @@ public:
   Activity& operator=(Activity const&) = delete;
 #endif
 
-  enum class State { INITED = 0, STARTING, STARTED, CANCELED, FINISHED };
+  // enum class State { ... }
+  XBT_DECLARE_ENUM_CLASS(State, INITED, STARTING, STARTED, CANCELED, FINISHED);
 
   /** Starts a previously created activity.
    *
index 83d8013..357102b 100644 (file)
                          a16, a15, a14, a13, a12, a11, a10, a9,         \
                          a8, a7, a6, a5, a4, a3, a2, a1, N, ...) N
 
+/* Expands to number of arguments. */
+#define _XBT_COUNT_ARGS(...) _XBT_IF_ONE_ARG_(__VA_ARGS__,              \
+                                              64, 63, 62, 61, 60, 59, 58, 57, 56, 55, 54, 53, 52, 51, 50, 49, \
+                                              48, 47, 46, 45, 44, 43, 42, 41, 40, 39, 38, 37, 36, 35, 34, 33, \
+                                              32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, \
+                                              16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1)
+
+/* Expands to list with each argument rendered as string. Add more cases if needed. */
+#define _XBT_STRINGIFY_ARGS(...) _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_02_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_02_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_03_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_03_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_04_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_04_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_05_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_05_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_06_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_06_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_07_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_07_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_08_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_08_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_09_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_09_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_10_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_10_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_11_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_11_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_12_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_12_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_13_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_13_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_14_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_14_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_15_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_15_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_16_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_16_(a, ...) #a, _XBT_IF_ONE_ARG(_XBT_STRINGIFY, _XBT_STRINGIFY_A_17_, __VA_ARGS__)(__VA_ARGS__)
+#define _XBT_STRINGIFY_A_17_(...) _XBT_STRINGIFY_ARGS("ERROR: MAXIMUM SIZE REACHED")
+
 /* Handle import/export stuff
  *
  * Rationale of XBT_PUBLIC:
index 2a1541a..cab7266 100644 (file)
@@ -7,8 +7,24 @@
 #ifndef XBT_UTILITY_HPP
 #define XBT_UTILITY_HPP
 
-#include <tuple>
+#include <array>
 #include <functional>
+#include <tuple>
+#include <xbt/base.h>
+
+/** @brief Helper macro to declare enum class
+ *
+ * Declares an enum class EnumType, and a function "const char* to_c_str(EnumType)" to retrieve a C-string description
+ * for each value.
+ */
+#define XBT_DECLARE_ENUM_CLASS(EnumType, ...)                                                                          \
+  enum class EnumType;                                                                                                 \
+  static constexpr char const* to_c_str(EnumType value)                                                                \
+  {                                                                                                                    \
+    constexpr std::array<const char*, _XBT_COUNT_ARGS(__VA_ARGS__)> names{{_XBT_STRINGIFY_ARGS(__VA_ARGS__)}};         \
+    return names[static_cast<int>(value)];                                                                             \
+  }                                                                                                                    \
+  enum class EnumType { __VA_ARGS__ } /* defined here to handle trailing semicolon */
 
 namespace simgrid {
 namespace xbt {
index e5f061e..def6d95 100644 (file)
@@ -7,7 +7,6 @@
 #include "simgrid/modelchecker.h"
 #include "src/mc/mc_replay.hpp"
 #include "src/simix/smx_private.hpp"
-#include <array>
 #include <cmath> // isfinite()
 
 XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_process);
@@ -43,10 +42,7 @@ double ActivityImpl::get_remaining() const
 
 const char* ActivityImpl::get_state_str() const
 {
-  constexpr std::array<const char*, 12> names{{"WAITING", "READY", "RUNNING", "DONE", "CANCELED", "FAILED",
-                                               "SRC_HOST_FAILURE", "DST_HOST_FAILURE", "TIMEOUT", "SRC_TIMEOUT",
-                                               "DST_TIMEOUT", "LINK_FAILURE"}};
-  return names[static_cast<int>(state_)];
+  return to_c_str(state_);
 }
 
 bool ActivityImpl::test()
index 7bc0215..4ba5273 100644 (file)
@@ -9,8 +9,8 @@
 #include <string>
 #include <list>
 
-#include <xbt/base.h>
 #include "simgrid/forward.h"
+#include <xbt/utility.hpp>
 
 #include <atomic>
 #include <simgrid/kernel/resource/Action.hpp>
 namespace simgrid {
 namespace kernel {
 namespace activity {
-enum class State {
-  WAITING = 0,
-  READY,
-  RUNNING,
-  DONE,
-  CANCELED,
-  FAILED,
-  SRC_HOST_FAILURE,
-  DST_HOST_FAILURE,
-  TIMEOUT,
-  SRC_TIMEOUT,
-  DST_TIMEOUT,
-  LINK_FAILURE
-};
+
+XBT_DECLARE_ENUM_CLASS(State, WAITING, READY, RUNNING, DONE, CANCELED, FAILED, SRC_HOST_FAILURE, DST_HOST_FAILURE,
+                       TIMEOUT, SRC_TIMEOUT, DST_TIMEOUT, LINK_FAILURE);
 
 class XBT_PUBLIC ActivityImpl {
   std::atomic_int_fast32_t refcount_{0};
index e9485d6..39668cb 100644 (file)
@@ -28,7 +28,7 @@ class XBT_PUBLIC CommImpl : public ActivityImpl_T<CommImpl> {
 public:
   enum class Type { SEND, RECEIVE };
 
-  CommImpl(Type type) : type_(type) {}
+  explicit CommImpl(Type type) : type_(type) {}
   CommImpl(s4u::Host* from, s4u::Host* to, double bytes);
 
   CommImpl& set_size(double size);
index bce70eb..f7859f4 100644 (file)
@@ -326,7 +326,7 @@ bool ModelChecker::checkDeadlock()
   xbt_assert(s == sizeof(message) && message.type == MessageType::DEADLOCK_CHECK_REPLY,
              "Received unexpected message %s (%i, size=%i) "
              "expected MessageType::DEADLOCK_CHECK_REPLY (%i, size=%i)",
-             MC_message_type_name(message.type), (int)message.type, (int)s, (int)MessageType::DEADLOCK_CHECK_REPLY,
+             to_c_str(message.type), (int)message.type, (int)s, (int)MessageType::DEADLOCK_CHECK_REPLY,
              (int)sizeof(message));
   return message.value != 0;
 }
index 8c3cb1d..3cd49b2 100644 (file)
@@ -141,8 +141,7 @@ void AppSide::handle_messages() const
         break;
 
       default:
-        xbt_die("Received unexpected message %s (%i)", MC_message_type_name(message->type),
-                static_cast<int>(message->type));
+        xbt_die("Received unexpected message %s (%i)", to_c_str(message->type), static_cast<int>(message->type));
         break;
     }
   }
index be28998..cfbf715 100644 (file)
@@ -26,7 +26,7 @@ Channel::~Channel()
 /** @brief Send a message; returns 0 on success or errno on failure */
 int Channel::send(const void* message, size_t size) const
 {
-  XBT_DEBUG("Send %s", MC_message_type_name(*(MessageType*)message));
+  XBT_DEBUG("Send %s", to_c_str(*(MessageType*)message));
   while (::send(this->socket_, message, size, 0) == -1) {
     if (errno != EINTR)
       return errno;
@@ -38,7 +38,7 @@ ssize_t Channel::receive(void* message, size_t size, bool block) const
 {
   ssize_t res = recv(this->socket_, message, size, block ? 0 : MSG_DONTWAIT);
   if (res != -1)
-    XBT_DEBUG("Receive %s", MC_message_type_name(*(MessageType*)message));
+    XBT_DEBUG("Receive %s", to_c_str(*(MessageType*)message));
   return res;
 }
 }
diff --git a/src/mc/remote/mc_protocol.cpp b/src/mc/remote/mc_protocol.cpp
deleted file mode 100644 (file)
index 941c602..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* Copyright (c) 2015-2021. The SimGrid Team.
- * All rights reserved.                                                     */
-
-/* This program is free software; you can redistribute it and/or modify it
- * under the terms of the license (GNU LGPL) which comes with this package. */
-
-#include "src/mc/remote/mc_protocol.h"
-#include <array>
-
-const char* MC_message_type_name(simgrid::mc::MessageType type)
-{
-  constexpr std::array<const char*, 14> names{{"NONE", "CONTINUE", "IGNORE_HEAP", "UNIGNORE_HEAP", "IGNORE_MEMORY",
-                                               "STACK_REGION", "REGISTER_SYMBOL", "DEADLOCK_CHECK",
-                                               "DEADLOCK_CHECK_REPLY", "WAITING", "SIMCALL_HANDLE", "ASSERTION_FAILED",
-                                               "ACTOR_ENABLED", "ACTOR_ENABLED_REPLY"}};
-  return names[static_cast<int>(type)];
-}
index 83d2239..54ec711 100644 (file)
 #include "simgrid/forward.h" // aid_t
 #include <array>
 #include <cstdint>
+#include <xbt/utility.hpp>
 
 // ***** Messages
 namespace simgrid {
 namespace mc {
 
-enum class MessageType {
-  NONE,
-  CONTINUE,
-  IGNORE_HEAP,
-  UNIGNORE_HEAP,
-  IGNORE_MEMORY,
-  STACK_REGION,
-  REGISTER_SYMBOL,
-  DEADLOCK_CHECK,
-  DEADLOCK_CHECK_REPLY,
-  WAITING,
-  SIMCALL_HANDLE,
-  ASSERTION_FAILED,
-  ACTOR_ENABLED,
-  ACTOR_ENABLED_REPLY
-};
+XBT_DECLARE_ENUM_CLASS(MessageType, NONE, CONTINUE, IGNORE_HEAP, UNIGNORE_HEAP, IGNORE_MEMORY, STACK_REGION,
+                       REGISTER_SYMBOL, DEADLOCK_CHECK, DEADLOCK_CHECK_REPLY, WAITING, SIMCALL_HANDLE, ASSERTION_FAILED,
+                       ACTOR_ENABLED, ACTOR_ENABLED_REPLY);
 
 } // namespace mc
 } // namespace simgrid
@@ -111,7 +99,5 @@ struct s_mc_message_actor_enabled_t {
   aid_t aid; // actor ID
 };
 
-XBT_PRIVATE const char* MC_message_type_name(simgrid::mc::MessageType type);
-
 #endif // __cplusplus
 #endif
index 8845969..55bba1e 100644 (file)
@@ -9,8 +9,6 @@
 #include "simgrid/s4u/Engine.hpp"
 #include "src/kernel/activity/ActivityImpl.hpp"
 
-#include <array>
-
 XBT_LOG_EXTERNAL_CATEGORY(s4u);
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY(s4u_activity, s4u, "S4U activities");
 
@@ -69,8 +67,7 @@ Activity* Activity::resume()
 
 const char* Activity::get_state_str() const
 {
-  constexpr std::array<const char*, 5> names{{"INITED", "STARTING", "STARTED", "CANCELED", "FINISHED"}};
-  return names[static_cast<int>(state_)];
+  return to_c_str(state_);
 }
 
 double Activity::get_remaining() const
index d5e1b5c..1731015 100644 (file)
@@ -623,7 +623,6 @@ set(MC_SRC
   src/mc/remote/RemoteSimulation.cpp
   src/mc/remote/RemotePtr.hpp
   src/mc/remote/mc_protocol.h
-  src/mc/remote/mc_protocol.cpp
 
   src/mc/sosp/PageStore.hpp
   src/mc/sosp/PageStore.cpp