From 0098f0b1eebfc51c33e2421498d385e7c472b2d3 Mon Sep 17 00:00:00 2001 From: jief666 Date: Fri, 19 Mar 2021 21:37:24 +0300 Subject: [PATCH] Forgotten file. --- rEFIt_UEFI/cpp_lib/undefinable.h | 56 ++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 rEFIt_UEFI/cpp_lib/undefinable.h diff --git a/rEFIt_UEFI/cpp_lib/undefinable.h b/rEFIt_UEFI/cpp_lib/undefinable.h new file mode 100644 index 000000000..af40ce896 --- /dev/null +++ b/rEFIt_UEFI/cpp_lib/undefinable.h @@ -0,0 +1,56 @@ +/* + * def_types.h + * + * Created on: Mar 19, 2021 + * Author: jief + */ + +#ifndef CPP_LIB_DEF_TYPES_H_ +#define CPP_LIB_DEF_TYPES_H_ + +template +class undefinable +{ +protected: + bool m_defined = false; + T m_value = false; + +public: + bool isDefined() const { return m_defined; } + void setDefined(bool b) { m_defined = b; } + + operator T() const { + if ( !isDefined() ) panic("def_type is not defined"); + return m_value; + } + undefinable& operator = (T value) { + setDefined(true); + m_value = value; + return *this; + } +}; + +class undefinable_bool : public undefinable +{ + using super = undefinable; +public: + undefinable_bool& operator = (bool b) { super::operator=(b); return *this; } +}; + +class undefinable_uint16 : public undefinable +{ + using super = undefinable; +public: + undefinable_uint16& operator = (uint16_t b) { super::operator=(b); return *this; } +}; + +class undefinable_uint32 : public undefinable +{ + using super = undefinable; +public: + undefinable_uint32& operator = (uint32_t b) { super::operator=(b); return *this; } +}; + + + +#endif /* CPP_LIB_DEF_TYPES_H_ */