X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d9a39dd49d59d7ef3a66727056ab3725e1ebcefc..6e0d0f6c1580aceb13c060bbf95cbe9000cf6bbd:/src/kernel/actor/CommObserver.hpp diff --git a/src/kernel/actor/CommObserver.hpp b/src/kernel/actor/CommObserver.hpp index c64f2b0b4d..161e095e05 100644 --- a/src/kernel/actor/CommObserver.hpp +++ b/src/kernel/actor/CommObserver.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2019-2022. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2019-2023. 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. */ @@ -12,76 +12,81 @@ #include "xbt/asserts.h" #include +#include -namespace simgrid { -namespace kernel { -namespace actor { +namespace simgrid::kernel::actor { -class ActivityTestSimcall : public ResultingSimcall { +class ActivityTestSimcall final : public ResultingSimcall { activity::ActivityImpl* const activity_; + std::string fun_call_; public: - ActivityTestSimcall(ActorImpl* actor, activity::ActivityImpl* activity) - : ResultingSimcall(actor, true), activity_(activity) + ActivityTestSimcall(ActorImpl* actor, activity::ActivityImpl* activity, std::string_view fun_call) + : ResultingSimcall(actor, true), activity_(activity), fun_call_(fun_call) { } - bool is_visible() const override { return true; } activity::ActivityImpl* get_activity() const { return activity_; } void serialize(std::stringstream& stream) const override; + std::string to_string() const override; }; -class ActivityTestanySimcall : public ResultingSimcall { +class ActivityTestanySimcall final : public ResultingSimcall { const std::vector& activities_; std::vector indexes_; // indexes in activities_ pointing to ready activities (=whose test() is positive) int next_value_ = 0; + std::string fun_call_; public: - ActivityTestanySimcall(ActorImpl* actor, const std::vector& activities); - bool is_visible() const override { return true; } + ActivityTestanySimcall(ActorImpl* actor, const std::vector& activities, + std::string_view fun_call); bool is_enabled() override { return true; /* can return -1 if no activity is ready */ } void serialize(std::stringstream& stream) const override; - int get_max_consider() override; + std::string to_string() const override; + int get_max_consider() const override; void prepare(int times_considered) override; const std::vector& get_activities() const { return activities_; } int get_value() const { return next_value_; } }; -class ActivityWaitSimcall : public ResultingSimcall { +class ActivityWaitSimcall final : public ResultingSimcall { activity::ActivityImpl* activity_; const double timeout_; + std::string fun_call_; public: - ActivityWaitSimcall(ActorImpl* actor, activity::ActivityImpl* activity, double timeout) - : ResultingSimcall(actor, false), activity_(activity), timeout_(timeout) + ActivityWaitSimcall(ActorImpl* actor, activity::ActivityImpl* activity, double timeout, std::string_view fun_call) + : ResultingSimcall(actor, false), activity_(activity), timeout_(timeout), fun_call_(fun_call) { } void serialize(std::stringstream& stream) const override; - bool is_visible() const override { return true; } + std::string to_string() const override; bool is_enabled() override; activity::ActivityImpl* get_activity() const { return activity_; } void set_activity(activity::ActivityImpl* activity) { activity_ = activity; } double get_timeout() const { return timeout_; } }; -class ActivityWaitanySimcall : public ResultingSimcall { +class ActivityWaitanySimcall final : public ResultingSimcall { const std::vector& activities_; std::vector indexes_; // indexes in activities_ pointing to ready activities (=whose test() is positive) const double timeout_; int next_value_ = 0; + std::string fun_call_; public: - ActivityWaitanySimcall(ActorImpl* actor, const std::vector& activities, double timeout); + ActivityWaitanySimcall(ActorImpl* actor, const std::vector& activities, double timeout, + std::string_view fun_call); bool is_enabled() override; void serialize(std::stringstream& stream) const override; - bool is_visible() const override { return true; } + std::string to_string() const override; void prepare(int times_considered) override; - int get_max_consider() override; + int get_max_consider() const override; const std::vector& get_activities() const { return activities_; } double get_timeout() const { return timeout_; } int get_value() const { return next_value_; } }; -class CommIsendSimcall : public SimcallObserver { +class CommIsendSimcall final : public SimcallObserver { activity::MailboxImpl* mbox_; double payload_size_; double rate_; @@ -89,19 +94,23 @@ class CommIsendSimcall : public SimcallObserver { size_t src_buff_size_; void* payload_; bool detached_; - activity::CommImpl* comm_; - int tag_; + activity::CommImpl* comm_ = {}; + int tag_ = {}; - bool (*match_fun_)(void*, void*, activity::CommImpl*); - void (*clean_fun_)(void*); // used to free the synchro in case of problem after a detached send - void (*copy_data_fun_)(activity::CommImpl*, void*, size_t); // used to copy data if not default one + std::function match_fun_; + std::function clean_fun_; // used to free the synchro in case of problem after a detached send + std::function copy_data_fun_; // used to copy data if not default one + + std::string fun_call_; public: - CommIsendSimcall(ActorImpl* actor, activity::MailboxImpl* mbox, double payload_size, double rate, - unsigned char* src_buff, size_t src_buff_size, bool (*match_fun)(void*, void*, activity::CommImpl*), - void (*clean_fun)(void*), // used to free the synchro in case of problem after a detached send - void (*copy_data_fun)(activity::CommImpl*, void*, size_t), // used to copy data if not default one - void* payload, bool detached) + CommIsendSimcall( + ActorImpl* actor, activity::MailboxImpl* mbox, double payload_size, double rate, unsigned char* src_buff, + size_t src_buff_size, const std::function& match_fun, + const std::function& clean_fun, // used to free the synchro in case of problem after a detached send + const std::function& + copy_data_fun, // used to copy data if not default one + void* payload, bool detached, std::string_view fun_call) : SimcallObserver(actor) , mbox_(mbox) , payload_size_(payload_size) @@ -113,10 +122,11 @@ public: , match_fun_(match_fun) , clean_fun_(clean_fun) , copy_data_fun_(copy_data_fun) + , fun_call_(fun_call) { } void serialize(std::stringstream& stream) const override; - bool is_visible() const override { return true; } + std::string to_string() const override; activity::MailboxImpl* get_mailbox() const { return mbox_; } double get_payload_size() const { return payload_size_; } double get_rate() const { return rate_; } @@ -127,27 +137,30 @@ public: void set_comm(activity::CommImpl* comm) { comm_ = comm; } void set_tag(int tag) { tag_ = tag; } - auto get_match_fun() const { return match_fun_; } - auto get_clean_fun() const { return clean_fun_; } - auto get_copy_data_fun() const { return copy_data_fun_; } + auto const& get_match_fun() const { return match_fun_; } + auto const& get_clean_fun() const { return clean_fun_; } + auto const& get_copy_data_fun() const { return copy_data_fun_; } }; -class CommIrecvSimcall : public SimcallObserver { +class CommIrecvSimcall final : public SimcallObserver { activity::MailboxImpl* mbox_; unsigned char* dst_buff_; size_t* dst_buff_size_; void* payload_; double rate_; - int tag_; - activity::CommImpl* comm_; + activity::CommImpl* comm_ = {}; + int tag_ = {}; + + std::function match_fun_; + std::function copy_data_fun_; // used to copy data if not default one - bool (*match_fun_)(void*, void*, activity::CommImpl*); - void (*copy_data_fun_)(activity::CommImpl*, void*, size_t); // used to copy data if not default one + std::string fun_call_; public: CommIrecvSimcall(ActorImpl* actor, activity::MailboxImpl* mbox, unsigned char* dst_buff, size_t* dst_buff_size, - bool (*match_fun)(void*, void*, activity::CommImpl*), - void (*copy_data_fun)(activity::CommImpl*, void*, size_t), void* payload, double rate) + const std::function& match_fun, + const std::function& copy_data_fun, void* payload, + double rate, std::string_view fun_call) : SimcallObserver(actor) , mbox_(mbox) , dst_buff_(dst_buff) @@ -156,10 +169,11 @@ public: , rate_(rate) , match_fun_(match_fun) , copy_data_fun_(copy_data_fun) + , fun_call_(fun_call) { } void serialize(std::stringstream& stream) const override; - bool is_visible() const override { return true; } + std::string to_string() const override; activity::MailboxImpl* get_mailbox() const { return mbox_; } double get_rate() const { return rate_; } unsigned char* get_dst_buff() const { return dst_buff_; } @@ -168,12 +182,56 @@ public: void set_comm(activity::CommImpl* comm) { comm_ = comm; } void set_tag(int tag) { tag_ = tag; } - auto get_match_fun() const { return match_fun_; }; - auto get_copy_data_fun() const { return copy_data_fun_; } + auto const& get_match_fun() const { return match_fun_; }; + auto const& get_copy_data_fun() const { return copy_data_fun_; } +}; + +class MessIputSimcall final : public SimcallObserver { + activity::MessageQueueImpl* queue_; + void* payload_; + activity::MessImpl* mess_ = {}; + +public: + MessIputSimcall( + ActorImpl* actor, activity::MessageQueueImpl* queue, void* payload) + : SimcallObserver(actor) + , queue_(queue) + , payload_(payload) + { + } + void serialize(std::stringstream& stream) const override; + std::string to_string() const override; + activity::MessageQueueImpl* get_queue() const { return queue_; } + void* get_payload() const { return payload_; } + void set_message(activity::MessImpl* mess) { mess_ = mess; } +}; + +class MessIgetSimcall final : public SimcallObserver { + activity::MessageQueueImpl* queue_; + unsigned char* dst_buff_; + size_t* dst_buff_size_; + void* payload_; + activity::MessImpl* mess_ = {}; + +public: + MessIgetSimcall(ActorImpl* actor, activity::MessageQueueImpl* queue, unsigned char* dst_buff, size_t* dst_buff_size, + void* payload) + : SimcallObserver(actor) + , queue_(queue) + , dst_buff_(dst_buff) + , dst_buff_size_(dst_buff_size) + , payload_(payload) + { + } + void serialize(std::stringstream& stream) const override; + std::string to_string() const override; + activity::MessageQueueImpl* get_queue() const { return queue_; } + unsigned char* get_dst_buff() const { return dst_buff_; } + size_t* get_dst_buff_size() const { return dst_buff_size_; } + void* get_payload() const { return payload_; } + void set_message(activity::MessImpl* mess) { mess_ = mess; } }; -} // namespace actor -} // namespace kernel -} // namespace simgrid +} // namespace simgrid::kernel::actor #endif