getfem-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Getfem-commits] (no subject)


From: Roman Putanowicz
Subject: [Getfem-commits] (no subject)
Date: Wed, 12 Jul 2017 17:41:46 -0400 (EDT)

branch: devel-rppplx-external-except
commit 6a216fbe07f374519c0eda1e630ba0ed60af3eab
Author: rpplx <address@hidden>
Date:   Wed Jul 12 22:46:41 2017 +0200

    Added feedback management facilities. This management installs default 
feedback, so no change to existing code will be necessary. The same time it 
offers method to setup user defined feedback handler.
---
 src/gmm/gmm_feedback_management.h | 43 +++++++++++++++++++++++++++++++++++++++
 1 file changed, 43 insertions(+)

diff --git a/src/gmm/gmm_feedback_management.h 
b/src/gmm/gmm_feedback_management.h
index 51c2945..3a16a57 100644
--- a/src/gmm/gmm_feedback_management.h
+++ b/src/gmm/gmm_feedback_management.h
@@ -75,5 +75,48 @@ struct default_feedback_handler final : public 
base_feedback_handler {
   }
 };
 
+// This class acts as a run-time dispatcher for sending feedback
+// messages and getting trace and warning levels.
+class feedback_manager {
+public:
+    // Steals the pointer to a messenger object that provides
+    // feedback handling implementation.
+    //
+    // Example:
+    //   feedback_manager::manage(new default_feedback_handler);
+    //
+    static base_feedback_handler* manage(base_feedback_handler 
*pHandler=nullptr);
+    static void send(const std::string &message, FeedbackType type, size_t 
level);
+    static size_t traces_level();
+    static size_t warning_level();
+    // Action to be taken when feedback handling is done
+    static void terminating_action();
+};
+
+inline base_feedback_handler* feedback_manager::manage(base_feedback_handler 
*pHandler) {
+  static std::unique_ptr<base_feedback_handler> pHandler_ =
+    std::move(std::unique_ptr<base_feedback_handler>(new 
default_feedback_handler));
+  if (pHandler != nullptr) {
+    pHandler_.reset(pHandler);
+  }
+  return pHandler_.get();
+}
+
+inline void feedback_manager::send(const std::string &message, FeedbackType 
type, size_t level) {
+  feedback_manager::manage()->send(message, type, level);
+}
+
+inline void feedback_manager::terminating_action() {
+  feedback_manager::manage()->terminating_action();
+}
+
+inline size_t feedback_manager::traces_level() {
+  return feedback_manager::manage()->traces_level();
+}
+
+inline size_t feedback_manager::warning_level() {
+  return feedback_manager::manage()->warning_level();
+}
+
 } // namespace gmm
 #endif /* GMM_FEEDBACK_MANAGEMENT_H__ */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]