X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/892e136b3be07e45110a5a2db2889470386e954a..35e51746af39c4061a0336771f8f31bb371fae23:/src/xbt/xbt_replay.cpp diff --git a/src/xbt/xbt_replay.cpp b/src/xbt/xbt_replay.cpp index d9e475b8de..9af925bd2f 100644 --- a/src/xbt/xbt_replay.cpp +++ b/src/xbt/xbt_replay.cpp @@ -4,6 +4,7 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ +#include #include "src/internal_config.h" #include "xbt/sysdep.h" #include "xbt/log.h" @@ -28,10 +29,10 @@ typedef struct s_replay_reader { FILE *xbt_action_fp; -xbt_dict_t xbt_action_funs = NULL; -xbt_dict_t xbt_action_queues = NULL; +xbt_dict_t xbt_action_funs = nullptr; +xbt_dict_t xbt_action_queues = nullptr; -static char *action_line = NULL; +static char *action_line = nullptr; static size_t action_len = 0; int is_replay_active = 0 ; @@ -41,13 +42,13 @@ static char **action_get_action(char *name); static char *str_tolower (const char *str) { char *ret = xbt_strdup (str); - int i, n = strlen (ret); - for (i = 0; i < n; i++) + int n = strlen(ret); + for (int i = 0; i < n; i++) ret[i] = tolower (str[i]); return ret; } -int _xbt_replay_is_active(void){ +int _xbt_replay_is_active(){ return is_replay_active; } @@ -55,28 +56,26 @@ xbt_replay_reader_t xbt_replay_reader_new(const char *filename) { xbt_replay_reader_t res = xbt_new0(s_xbt_replay_reader_t,1); res->fp = fopen(filename, "r"); - xbt_assert(res->fp != NULL, "Cannot open %s: %s", filename, strerror(errno)); + xbt_assert(res->fp != nullptr, "Cannot open %s: %s", filename, strerror(errno)); res->filename = xbt_strdup(filename); return res; } const char **xbt_replay_reader_get(xbt_replay_reader_t reader) { - ssize_t read; - xbt_dynar_t d; - read = xbt_getline(&reader->line, &reader->line_len, reader->fp); - //XBT_INFO("got from trace: %s",reader->line); + ssize_t read = xbt_getline(&reader->line, &reader->line_len, reader->fp); + XBT_DEBUG("got from trace: %s", reader->line); reader->linenum++; if (read==-1) - return NULL; /* end of file */ + return nullptr; /* end of file */ char *comment = strchr(reader->line, '#'); - if (comment != NULL) + if (comment != nullptr) *comment = '\0'; - xbt_str_trim(reader->line, NULL); + xbt_str_trim(reader->line, nullptr); if (reader->line[0] == '\0') return xbt_replay_reader_get(reader); /* Get next line */ - d=xbt_str_split_quoted_in_place(reader->line); + xbt_dynar_t d = xbt_str_split_quoted_in_place(reader->line); if (xbt_dynar_is_empty(d)) { xbt_dynar_free(&d); return xbt_replay_reader_get(reader); /* Get next line */ @@ -91,7 +90,7 @@ void xbt_replay_reader_free(xbt_replay_reader_t *reader) fclose((*reader)->fp); free((*reader)->line); free(*reader); - *reader=NULL; + *reader=nullptr; } /** @@ -108,8 +107,11 @@ void xbt_replay_reader_free(xbt_replay_reader_t *reader) */ void xbt_replay_action_register(const char *action_name, action_fun function) { + if (xbt_action_funs == nullptr) // If the user registers a function before the start + _xbt_replay_action_init(); + char* lowername = str_tolower (action_name); - xbt_dict_set(xbt_action_funs, lowername, (void*) function, NULL); + xbt_dict_set(xbt_action_funs, lowername, (void*) function, nullptr); xbt_free(lowername); } @@ -117,24 +119,24 @@ void xbt_replay_action_register(const char *action_name, action_fun function) * * It returns false if it was already done by another process. */ -int _xbt_replay_action_init(void) +int _xbt_replay_action_init() { if (xbt_action_funs) return 0; is_replay_active = 1; - xbt_action_funs = xbt_dict_new_homogeneous(NULL); - xbt_action_queues = xbt_dict_new_homogeneous(NULL); + xbt_action_funs = xbt_dict_new_homogeneous(nullptr); + xbt_action_queues = xbt_dict_new_homogeneous(nullptr); return 1; } -void _xbt_replay_action_exit(void) +void _xbt_replay_action_exit() { xbt_dict_free(&xbt_action_queues); xbt_dict_free(&xbt_action_funs); free(action_line); - xbt_action_queues = NULL; - xbt_action_funs = NULL; - action_line = NULL; + xbt_action_queues = nullptr; + xbt_action_funs = nullptr; + action_line = nullptr; } /** @@ -146,10 +148,12 @@ void _xbt_replay_action_exit(void) */ int xbt_replay_action_runner(int argc, char *argv[]) { - int i; if (xbt_action_fp) { // A unique trace file - char **evt; - while ((evt = action_get_action(argv[0]))) { + while (true) { + char **evt = action_get_action(argv[0]); + if (evt == nullptr) + break; + char* lowername = str_tolower (evt[1]); action_fun function = (action_fun)xbt_dict_get(xbt_action_funs, lowername); xbt_free(lowername); @@ -159,7 +163,7 @@ int xbt_replay_action_runner(int argc, char *argv[]) catch(xbt_ex& e) { xbt_die("Replay error :\n %s", e.what()); } - for (i=0;evt[i]!= NULL;i++) + for (int i=0;evt[i]!= nullptr;i++) free(evt[i]); free(evt); } @@ -193,12 +197,12 @@ int xbt_replay_action_runner(int argc, char *argv[]) static char **action_get_action(char *name) { - xbt_dynar_t evt = NULL; - char *evtname = NULL; + xbt_dynar_t evt = nullptr; + char *evtname = nullptr; xbt_dynar_t myqueue = (xbt_dynar_t) xbt_dict_get_or_null(xbt_action_queues, name); - if (myqueue == NULL || xbt_dynar_is_empty(myqueue)) { // nothing stored for me. Read the file further - if (xbt_action_fp == NULL) { // File closed now. There's nothing more to read. I'm out of here + if (myqueue == nullptr || xbt_dynar_is_empty(myqueue)) { // nothing stored for me. Read the file further + if (xbt_action_fp == nullptr) { // File closed now. There's nothing more to read. I'm out of here goto todo_done; } // Read lines until I reach something for me (which breaks in loop body) @@ -206,9 +210,9 @@ static char **action_get_action(char *name) while (xbt_getline(&action_line, &action_len, xbt_action_fp) != -1) { // cleanup and split the string I just read char *comment = strchr(action_line, '#'); - if (comment != NULL) + if (comment != nullptr) *comment = '\0'; - xbt_str_trim(action_line, NULL); + xbt_str_trim(action_line, nullptr); if (action_line[0] == '\0') continue; /* we cannot split in place here because we parse&store several lines for @@ -223,14 +227,14 @@ static char **action_get_action(char *name) // Else, I have to store it for the relevant colleague xbt_dynar_t otherqueue = (xbt_dynar_t) xbt_dict_get_or_null(xbt_action_queues, evtname); - if (otherqueue == NULL) { // Damn. Create the queue of that guy + if (otherqueue == nullptr) { // Damn. Create the queue of that guy otherqueue = xbt_dynar_new(sizeof(xbt_dynar_t), xbt_dynar_free_voidp); - xbt_dict_set(xbt_action_queues, evtname, otherqueue, NULL); + xbt_dict_set(xbt_action_queues, evtname, otherqueue, nullptr); } xbt_dynar_push(otherqueue, &evt); } } - goto todo_done; // end of file reached while searching in vain for more work + // end of file reached while searching in vain for more work } else { // Get something from my queue and return it xbt_dynar_shift(myqueue, &evt); @@ -240,9 +244,9 @@ static char **action_get_action(char *name) // I did all my actions for me in the file (either I closed the file, or a colleague did) // Let's cleanup before leaving todo_done: - if (myqueue != NULL) { + if (myqueue != nullptr) { xbt_dynar_free(&myqueue); xbt_dict_remove(xbt_action_queues, name); } - return NULL; + return nullptr; }