1 /* Copyright (c) 2010-2020. 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"
19 enum e_event_type : unsigned int {
20 PAJE_DefineContainerType,
21 PAJE_DefineVariableType,
25 PAJE_DefineEntityValue,
27 PAJE_DestroyContainer,
41 Container* container_;
44 static xbt::signal<void(PajeEvent&)> on_creation;
45 static xbt::signal<void(PajeEvent&)> on_destruction;
48 e_event_type eventType_;
49 std::stringstream stream_;
51 PajeEvent(Container* container, Type* type, double timestamp, e_event_type eventType);
54 Container* get_container() const { return container_; }
55 Type* get_type() const { return type_; }
57 virtual void print() = 0;
58 void insert_into_buffer();
61 class VariableEvent : public PajeEvent {
65 VariableEvent(double timestamp, Container* container, Type* type, e_event_type event_type, double value)
66 : PajeEvent::PajeEvent(container, type, timestamp, event_type), value_(value)
69 void print() override { stream_ << " " << value_; }
72 class StateEvent : public PajeEvent {
75 std::string filename = "(null)";
78 std::unique_ptr<TIData> extra_;
81 static xbt::signal<void(StateEvent&)> on_destruction;
82 StateEvent(Container* container, Type* type, e_event_type event_type, EntityValue* value, TIData* extra);
83 ~StateEvent() { on_destruction(*this); }
84 bool has_extra() { return extra_ != nullptr; }
85 void print() override;
88 class LinkEvent : public PajeEvent {
95 LinkEvent(Container* container, Type* type, e_event_type event_type, Container* sourceContainer,
96 const std::string& value, const std::string& key, int size)
97 : PajeEvent(container, type, SIMIX_get_clock(), event_type)
98 , endpoint_(sourceContainer)
104 void print() override;
107 class NewEvent : public PajeEvent {
111 NewEvent(double timestamp, Container* container, Type* type, EntityValue* value)
112 : PajeEvent::PajeEvent(container, type, timestamp, PAJE_NewEvent), value(value)
115 void print() override;
118 } // namespace simgrid