00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00027 #ifndef OPM_MATERIAL_ENSURE_FINALIZED_HPP
00028 #define OPM_MATERIAL_ENSURE_FINALIZED_HPP
00029
00030 #include <cassert>
00031 #include <opm/common/ErrorMacros.hpp>
00032
00033
00034 #define OPM_CHECK_PARAM_FINALIZED 1
00035
00036 #if ! defined(NDEBUG) && OPM_CHECK_PARAM_FINALIZED
00037 #define USE_OPM_CHECK_PARAM_FINALIZED 1
00038 #endif
00039
00040 namespace Opm {
00041
00046 class EnsureFinalized
00047 {
00048 #if USE_OPM_CHECK_PARAM_FINALIZED
00049 bool finalized_;
00050 #endif
00051
00052 protected:
00056 EnsureFinalized()
00057 #if USE_OPM_CHECK_PARAM_FINALIZED
00058 : finalized_( false )
00059 #endif
00060 {
00061 }
00062
00063 void check() const
00064 {
00065 #if USE_OPM_CHECK_PARAM_FINALIZED
00066 if( ! finalized_ )
00067 {
00068 OPM_THROW(std::runtime_error,"Parameter class has not been finalized before usage!");
00069 }
00070 #endif
00071 }
00072
00073 public:
00077 void finalize()
00078 {
00079 #if USE_OPM_CHECK_PARAM_FINALIZED
00080 finalized_ = true;
00081 #endif
00082 }
00083 };
00084
00085 #undef USE_OPM_CHECK_PARAM_FINALIZED
00086
00087 }
00088 #endif