From da4dfc35a84643b3592aa28d0b111cf3ba9b42c0 Mon Sep 17 00:00:00 2001
From: Joachim Klein <klein@tcs.inf.tu-dresden.de>
Date: Sat, 4 Aug 2018 15:00:04 +0200
Subject: [PATCH] AbstractModelChecker: add getClassName()

---
 src/storm/modelchecker/AbstractModelChecker.cpp | 7 +++++++
 src/storm/modelchecker/AbstractModelChecker.h   | 8 +++++++-
 2 files changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/storm/modelchecker/AbstractModelChecker.cpp b/src/storm/modelchecker/AbstractModelChecker.cpp
index e6c4f282f..1408b8987 100644
--- a/src/storm/modelchecker/AbstractModelChecker.cpp
+++ b/src/storm/modelchecker/AbstractModelChecker.cpp
@@ -24,9 +24,16 @@
 #include "storm/storage/dd/Add.h"
 #include "storm/storage/dd/Bdd.h"
 
+#include <boost/core/typeinfo.hpp>
+
 namespace storm {
     namespace modelchecker {
 
+        template<typename ModelType>
+        std::string AbstractModelChecker<ModelType>::getClassName() const {
+            return std::string(boost::core::demangled_name(BOOST_CORE_TYPEID(*this)));
+        }
+
         template<typename ModelType>
         std::unique_ptr<CheckResult> AbstractModelChecker<ModelType>::check(CheckTask<storm::logic::Formula, ValueType> const& checkTask) {
             Environment env;
diff --git a/src/storm/modelchecker/AbstractModelChecker.h b/src/storm/modelchecker/AbstractModelChecker.h
index 3251ea1fa..44373de03 100644
--- a/src/storm/modelchecker/AbstractModelChecker.h
+++ b/src/storm/modelchecker/AbstractModelChecker.h
@@ -1,6 +1,7 @@
 #ifndef STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_
 #define STORM_MODELCHECKER_ABSTRACTMODELCHECKER_H_
 
+#include <string>
 #include <boost/optional.hpp>
 
 #include "storm/modelchecker/CheckTask.h"
@@ -24,7 +25,12 @@ namespace storm {
             }
 
             typedef typename ModelType::ValueType ValueType;
-            
+
+            /*!
+             * Returns the name of the model checker class (e.g., for display in error messages).
+             */
+            virtual std::string getClassName() const;
+
             /*!
              * Determines whether the model checker can handle the given verification task. If this method returns
              * false, the task must not be checked using this model checker.