aboutsummaryrefslogtreecommitdiff
path: root/src/inputs.hpp
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2021-05-06 16:14:57 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2021-05-06 16:14:57 +0200
commitd0e57511fda12afb1049e260bcccb434b186d735 (patch)
treee8e59ce4fad415f47f958398eb5a3ec0ff7de28b /src/inputs.hpp
parent5f7bdb8f3cdb6a1e1f9eae7e0fbab34e2d1e5070 (diff)
Switch to timestamps
Diffstat (limited to 'src/inputs.hpp')
-rw-r--r--src/inputs.hpp66
1 files changed, 62 insertions, 4 deletions
diff --git a/src/inputs.hpp b/src/inputs.hpp
index fa8af17..23ced49 100644
--- a/src/inputs.hpp
+++ b/src/inputs.hpp
@@ -2,23 +2,81 @@
#include "rapidjson/filereadstream.h"
#include <cstdio>
#include <string>
+#include <vector>
+#include <iostream>
+#include <algorithm>
+#include "xbt/log.h"
+#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();
- double wake_duration;
- double wake_interval;
- double startup_delay;
+ /// @brief These are public attributes, please take care they are fragile
bool is_sender;
bool use_hint;
- int max_attempts;
int data_size;
+
}; \ No newline at end of file