From 583f84349dc34c29f246f405779452f4eae419da Mon Sep 17 00:00:00 2001 From: Christian Heinrich Date: Sat, 4 Jun 2016 16:42:25 +0200 Subject: [PATCH] [SMPI] Convert smpi_c99.cpp to actual C++ code --- src/smpi/smpi_c99.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/src/smpi/smpi_c99.cpp b/src/smpi/smpi_c99.cpp index 689ac88f00..cd0dff367a 100644 --- a/src/smpi/smpi_c99.cpp +++ b/src/smpi/smpi_c99.cpp @@ -4,7 +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 #include "private.h" typedef struct s_smpi_static { @@ -12,22 +12,22 @@ typedef struct s_smpi_static { void_f_pvoid_t free_fn; } s_smpi_static_t; -static xbt_dynar_t registered_static_stack = NULL; +/** + * \brief Holds a reference to all static variables that were registered + * via smpi_register_static(). This helps to free them when + * SMPI shuts down. + */ +static std::stack registered_static_variables_stack; -void smpi_register_static(void* arg, void_f_pvoid_t free_fn) -{ - s_smpi_static_t elm = { arg, free_fn }; - if (registered_static_stack==NULL) - registered_static_stack = xbt_dynar_new(sizeof(s_smpi_static_t), NULL); - xbt_dynar_push_as(registered_static_stack, s_smpi_static_t, elm); +void smpi_register_static(void* arg, void_f_pvoid_t free_fn) { + s_smpi_static_t elm { arg, free_fn }; + registered_static_variables_stack.push(elm); } -void smpi_free_static(void) -{ - while (xbt_dynar_is_empty(registered_static_stack)==0) { - s_smpi_static_t elm = - xbt_dynar_pop_as(registered_static_stack, s_smpi_static_t); +void smpi_free_static(void) { + while (!registered_static_variables_stack.empty()) { + s_smpi_static_t elm = registered_static_variables_stack.top(); elm.free_fn(elm.ptr); + registered_static_variables_stack.pop(); } - xbt_dynar_free(®istered_static_stack); } -- 2.20.1