aboutsummaryrefslogtreecommitdiff
path: root/src/Inputs.hpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-05-06 17:46:34 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-05-06 17:46:34 +0200
commit0ba773d913450f88ff7bcf54a39e0c8a8c4d7d64 (patch)
tree4a4e034d38620bd0161388e5f1739918c631dc56 /src/Inputs.hpp
parent87dd4219138ec98999b50d08c7190a942072b33f (diff)
Refactoring and start extended version
Diffstat (limited to 'src/Inputs.hpp')
-rw-r--r--src/Inputs.hpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/Inputs.hpp b/src/Inputs.hpp
new file mode 100644
index 0000000..e709d89
--- /dev/null
+++ b/src/Inputs.hpp
@@ -0,0 +1,81 @@
+#include <rapidjson/document.h>
+#include <rapidjson/filereadstream.h>
+
+#include <cstdio>
+#include <string>
+#include <vector>
+#include <iomanip>
+
+#define INPUTS_FILE "inputs.json"
+/// @brief Pay attention to this strange number, you could tear your hairs out
+#define JSON_BUFFER_SIZE 65536
+
+using namespace rapidjson;
+
+class Inputs {
+ /// @brief RapidJSON
+ Document d;
+ /// @brief Current node associated with the Inputs
+ std::string node_name;
+ /// @brief Timestamps (at which time the nodes should wake up)
+ std::vector<double> wake_ts;
+ /// @brief Wake up time durations
+ std::vector<double> wake_duration;
+ /**
+ * Recursively merge overlapping events
+ */
+ void MergeEvents();
+public:
+ /**
+ * Load node_name configuration
+ */
+ Inputs(std::string node_name);
+ /**
+ * Generate a SimGrid platform file from the json configuration
+ */
+ static void GeneratePlatform(std::string p);
+ /**
+ * Is there any event that remains in the queue ?
+ */
+ bool ShouldContinue(){return wake_ts.size()!=0;}
+ /**
+ * Is there another event to process ?
+ */
+ bool HasNext(){return(wake_ts.size()>1);}
+ /**
+ * Get current event timestamp
+ */
+ double GetTS(){return wake_ts.front();}
+ /**
+ * Get current event duration
+ */
+ double GetDuration(){return wake_duration.front();}
+ /**
+ * Get next event timestamp
+ */
+ double GetNextTS();
+ /**
+ * Get next event duration
+ */
+ double GetNextDuration();
+ /**
+ * Time travel machine (note that this function is following the second principle
+ * of thermodynamics)
+ */
+ void GotoNextEvent();
+ /**
+ * Allows to add a *FUTURE* event and merge overlapping events
+ */
+ void AddEvent(double ts, double duration);
+ /**
+ * This is the timeline
+ */
+ void DumpEvents();
+
+ /// @brief These are public attributes, please take care they are fragile
+ bool is_sender;
+ bool use_hint;
+ bool extended;
+ int data_size;
+
+}; \ No newline at end of file