#ifndef m6EAApyWyIDlhjYO7FswFNLRrB0 #define m6EAApyWyIDlhjYO7FswFNLRrB0 #include #include "checkpoint.hpp" #include "ephermal_checkpoint.hpp" #include "pointers.hpp" #include "quant_types.hpp" #include "string_helpers.hpp" namespace PropertyInstanceImpl { template < typename Prop, bool doWriteResults, typename Quant = typename Prop::quant, typename QuantClass = typename Prop::quant::class_t > struct PropertyInstance_Container; template struct PropertyInstance_Container< Prop, true, typename Prop::quant, ContinuousPropertyClass> { PropertyInstance_Container() : data(string(Prop::quant::name) + "_" + string(Prop::name), Prop::initialValue) {} typedef Checkpoint type; type data; }; template struct PropertyInstance_Container< Prop, false, typename Prop::quant, ContinuousPropertyClass> { PropertyInstance_Container() : data(string(Prop::quant::name) + "_" + string(Prop::name), Prop::initialValue) {} typedef EphermalCheckpoint type; type data; }; template struct PropertyInstance_Container< Prop, doWriteResults, typename Prop::quant, DiscretePropertyClass> { PropertyInstance_Container() : data(string(Prop::quant::name) + "_" + string(Prop::name), Prop::instance_ptr_t::maxInstances()) {} typedef Vector< typename Prop::type, 8 * Prop::size, // size in [bits] boost::mpl::bool_ > type; type data; }; } // namespace PropertyInstanceImpl template struct PropertyInstance : PropertyInstanceImpl::PropertyInstance_Container {}; #endif // m6EAApyWyIDlhjYO7FswFNLRrB0