#ifndef RJP_INTEGRAL_HPP #define RJP_INTEGRAL_HPP #include "value.hpp" #include namespace rjp{ class integer : public value { public: using underlying_type = RJP_int; public: using value::value; integer(underlying_type i); integer(void); explicit integer(const value& val); explicit integer(value&& val); integer(const value& val, underlying_type i); integer(value&& val, underlying_type i); integer(const integer&) = default; integer(integer&&) = default; ~integer(void) = default; integer& operator=(const integer&) = default; integer& operator=(integer&&) = default; underlying_type get(void)const; void set(underlying_type i); }; class dfloat : public value { public: using underlying_type = RJP_float; public: using value::value; dfloat(underlying_type i); dfloat(void); explicit dfloat(const value& val); explicit dfloat(value&& val); dfloat(const value& val, underlying_type i); dfloat(value&& val, underlying_type i); dfloat(const dfloat&) = default; dfloat(dfloat&&) = default; ~dfloat(void) = default; dfloat& operator=(const dfloat&) = default; dfloat& operator=(dfloat&&) = default; underlying_type get(void)const; void set(underlying_type i); }; class boolean : public value { public: using underlying_type = RJP_bool; public: using value::value; boolean(underlying_type i); boolean(void); explicit boolean(const value& val); explicit boolean(value&& val); boolean(const value& val, underlying_type i); boolean(value&& val, underlying_type i); boolean(const boolean&) = default; boolean(boolean&&) = default; ~boolean(void) = default; boolean& operator=(const boolean&) = default; boolean& operator=(boolean&&) = default; bool get(void)const; void set(bool i); }; class null : public value { public: using underlying_type = void; public: using value::value; null(void); explicit null(const value& val); explicit null(value&& val); null(const null&) = default; null(null&&) = default; ~null(void) = default; null& operator=(const null&) = default; null& operator=(null&&) = default; }; } #endif