/** * This implements a CDMaybe. * This has either been set in the context or it has not. * T must have a default constructor and support assignment. */ #include "cvc4_private.h" #pragma once #include "context/cdo.h" #include "context/context.h" namespace CVC4 { namespace context { class CDRaised { private: context::CDO d_flag; public: CDRaised(context::Context* c) : d_flag(c, false) {} bool isRaised() const { return d_flag.get(); } void raise(){ Assert(!isRaised()); d_flag.set(true); } }; /* class CDRaised */ template class CDMaybe { private: typedef std::pair BoolTPair; context::CDO d_data; public: CDMaybe(context::Context* c) : d_data(c, std::make_pair(false, T())) {} bool isSet() const { return d_data.get().first; } void set(const T& d){ Assert(!isSet()); d_data.set(std::make_pair(true, d)); } const T& get() const{ Assert(isSet()); return d_data.get().second; } }; /* class CDMaybe */ }/* CVC4::context namespace */ }/* CVC4 namespace */