+
+public:
+ ActivityTestSimcall(ActorImpl* actor, activity::ActivityImpl* activity)
+ : ResultingSimcall(actor, true), activity_(activity)
+ {
+ }
+ bool is_visible() const override { return true; }
+ activity::ActivityImpl* get_activity() const { return activity_; }
+ void serialize(std::stringstream& stream) const override;
+};
+
+class ActivityTestanySimcall : public ResultingSimcall<ssize_t> {
+ const std::vector<activity::ActivityImpl*>& activities_;
+ std::vector<int> indexes_; // indexes in activities_ pointing to ready activities (=whose test() is positive)
+ int next_value_ = 0;
+
+public:
+ ActivityTestanySimcall(ActorImpl* actor, const std::vector<activity::ActivityImpl*>& activities);
+ bool is_visible() const override { return true; }
+ 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;
+ void prepare(int times_considered) override;
+ const std::vector<activity::ActivityImpl*>& get_activities() const { return activities_; }
+ int get_value() const { return next_value_; }
+};
+
+class ActivityWaitSimcall : public ResultingSimcall<bool> {
+ activity::ActivityImpl* activity_;