diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-06 17:46:34 +0200 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2021-05-06 17:46:34 +0200 |
| commit | 0ba773d913450f88ff7bcf54a39e0c8a8c4d7d64 (patch) | |
| tree | 4a4e034d38620bd0161388e5f1739918c631dc56 /src/Inputs.hpp | |
| parent | 87dd4219138ec98999b50d08c7190a942072b33f (diff) | |
Refactoring and start extended version
Diffstat (limited to 'src/Inputs.hpp')
| -rw-r--r-- | src/Inputs.hpp | 81 |
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 |
