/* * Author: Patrick-Christopher Mattulat * Company: Lynar Studios * E-Mail: webmaster@lynarstudios.com * Created: 2020-08-17 * Changed: 2024-05-31 * * */ #ifndef LS_STD_LONG_HPP #define LS_STD_LONG_HPP #include #include #include #include namespace ls::std::boxing { ls_std_class Long final : public core::Class, public core::interface_type::IBoxing { public: explicit Long(core::type::long_type _value); Long(); ~Long() noexcept override; // assignment operators Long &operator=(core::type::long_type _value); // arithmetic operators core::type::long_type operator-() const; core::type::long_type operator+(const Long &_long) const; core::type::long_type operator+(core::type::long_type _value) const; core::type::long_type operator*(const Long &_long) const; core::type::long_type operator*(core::type::long_type _value) const; core::type::long_type operator-(const Long &_long) const; core::type::long_type operator-(core::type::long_type _value) const; core::type::long_type operator/(const Long &_long) const; core::type::long_type operator/(core::type::long_type _value) const; core::type::long_type operator%(const Long &_long) const; core::type::long_type operator%(core::type::long_type _value) const; // compound operators Long &operator+=(const Long &_long); Long &operator+=(core::type::long_type _value); Long &operator-=(const Long &_long); Long &operator-=(core::type::long_type _value); Long &operator*=(const Long &_long); Long &operator*=(core::type::long_type _value); Long &operator/=(const Long &_long); Long &operator/=(core::type::long_type _value); // comparison operators bool operator==(const Long &_long) const; bool operator==(core::type::long_type _value) const; bool operator!=(const Long &_long) const; bool operator!=(core::type::long_type _value) const; bool operator>(const Long &_long) const; bool operator>(core::type::long_type _value) const; bool operator>=(const Long &_long) const; bool operator>=(core::type::long_type _value) const; bool operator<(const Long &_long) const; bool operator<(core::type::long_type _value) const; bool operator<=(const Long &_long) const; bool operator<=(core::type::long_type _value) const; // logical operators friend bool operator!(const Long &_long) { return !_long.value; } // increment / decrement operator void operator++(); void operator--(); // implementation void parse(const ::std::string &_parseText) override; [[nodiscard]] ::std::string toString() override; // additional functionality [[nodiscard]] core::type::long_type getValue() const; private: core::type::long_type value{}; [[nodiscard]] static ::std::string _fetchClassName(); }; } #endif