1 /* Copyright (c) 2010-2021. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 #ifndef INSTR_PAJE_EVENTS_HPP
7 #define INSTR_PAJE_EVENTS_HPP
9 #include "src/instr/instr_private.hpp"
10 #include "src/internal_config.h"
20 enum class PajeEventType : unsigned int {
41 inline std::ostream& operator<<(std::ostream& os, PajeEventType event)
43 return os << static_cast<std::underlying_type_t<PajeEventType>>(event);
47 Container* container_;
50 static xbt::signal<void(PajeEvent&)> on_creation;
51 static xbt::signal<void(PajeEvent const&)> on_destruction;
54 PajeEventType eventType_;
55 std::stringstream stream_;
57 PajeEvent(Container* container, Type* type, double timestamp, PajeEventType eventType);
60 Container* get_container() const { return container_; }
61 Type* get_type() const { return type_; }
63 virtual void print() = 0;
64 void insert_into_buffer();
67 class VariableEvent : public PajeEvent {
71 VariableEvent(double timestamp, Container* container, Type* type, PajeEventType event_type, double value)
72 : PajeEvent::PajeEvent(container, type, timestamp, event_type), value_(value)
75 void print() override { stream_ << " " << value_; }
78 class StateEvent : public PajeEvent {
81 std::string filename = "(null)";
84 std::unique_ptr<TIData> extra_;
87 static xbt::signal<void(StateEvent const&)> on_destruction;
88 StateEvent(Container* container, Type* type, PajeEventType event_type, EntityValue* value, TIData* extra);
89 ~StateEvent() override { on_destruction(*this); }
90 bool has_extra() const { return extra_ != nullptr; }
91 void print() override;
94 class LinkEvent : public PajeEvent {
101 LinkEvent(Container* container, Type* type, PajeEventType event_type, Container* sourceContainer,
102 const std::string& value, const std::string& key, size_t size = static_cast<size_t>(-1))
103 : PajeEvent(container, type, simgrid_get_clock(), event_type)
104 , endpoint_(sourceContainer)
110 void print() override;
113 class NewEvent : public PajeEvent {
117 NewEvent(double timestamp, Container* container, Type* type, EntityValue* value)
118 : PajeEvent::PajeEvent(container, type, timestamp, PajeEventType::NewEvent), value(value)
121 void print() override;
124 } // namespace simgrid