From a1a033f1b73b29cc0961ab062303d82c66908e8f Mon Sep 17 00:00:00 2001 From: Adam G Nelson Date: Sun, 17 Jun 2018 10:58:28 -0400 Subject: [PATCH] including write_message access from the C side --- src/error.F90 | 9 +++++++++ src/error.h | 21 ++++++++++++++++++++- src/mgxs_interface.cpp | 3 +-- src/mgxs_interface.h | 1 + 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/error.F90 b/src/error.F90 index d041051d29..82b142b51e 100644 --- a/src/error.F90 +++ b/src/error.F90 @@ -265,4 +265,13 @@ contains end subroutine write_message + subroutine write_message_from_c(message, message_len, level) bind(C) + integer(C_INT), intent(in), value :: message_len + character(kind=C_CHAR), intent(in) :: message(message_len) + integer(C_INT), intent(in), value :: level + character(message_len+1) :: message_out + write(message_out, *) message + call write_message(message_out, level) + end subroutine write_message_from_c + end module error diff --git a/src/error.h b/src/error.h index 45d8bcdede..356dfd8010 100644 --- a/src/error.h +++ b/src/error.h @@ -11,7 +11,8 @@ namespace openmc { extern "C" void fatal_error_from_c(const char* message, int message_len); extern "C" void warning_from_c(const char* message, int message_len); - +extern "C" void write_message_from_c(const char* message, int message_len, + int level); inline void fatal_error(const char *message) @@ -43,5 +44,23 @@ void warning(const std::stringstream& message) warning(message.str()); } +inline +void write_message(const char* message, int level) +{ + write_message_from_c(message, strlen(message), level); +} + +inline +void write_message(const std::string& message, int level) +{ + write_message_from_c(message.c_str(), message.length(), level); +} + +inline +void write_message(const std::stringstream& message, int level) +{ + write_message(message.str(), level); +} + } // namespace openmc #endif // ERROR_H diff --git a/src/mgxs_interface.cpp b/src/mgxs_interface.cpp index 29202e49d5..45234f454d 100644 --- a/src/mgxs_interface.cpp +++ b/src/mgxs_interface.cpp @@ -19,8 +19,7 @@ add_mgxs_c(hid_t file_id, char* name, const int energy_groups, double_1dvec temperature; temperature.assign(temps, temps + n_temps); - // TODO: C++ replacement for write_message - // write_message("Loading " + std::string(names[i]) + " data...", 6); + write_message("Loading " + std::string(name) + " data...", 6); // Check to make sure cross section set exists in the library hid_t xs_grp; diff --git a/src/mgxs_interface.h b/src/mgxs_interface.h index 09993e9811..785f72b32f 100644 --- a/src/mgxs_interface.h +++ b/src/mgxs_interface.h @@ -4,6 +4,7 @@ #ifndef MGXS_INTERFACE_H #define MGXS_INTERFACE_H +#include "error.h" #include "mgxs.h"