/** * @file kcpp_object.h * @brief Kantan C++ Library Object ヘッダファイル。 * @copyright 2001 - 2024 Nomura Kei * @depends * kcpp.hpp */ #ifndef KCPP_OBJECT_HPP #define KCPP_OBJECT_HPP #include <memory> #include <ostream> #include <mutex> #include <kcpp.hpp> namespace kcpp { class String; class Object { public: // デフォルトコンストラクタ Object() noexcept; // コピーコンストラクタ Object(const Object &obj) noexcept; // ムーブコンストラクタ Object(Object &&obj) noexcept; // デストラクタ virtual ~Object() noexcept = default; // コピー代入演算子 Object &operator=(const Object &other) noexcept; // ムーブ代入演算子 Object &operator=(Object &&obj) noexcept; // クラス名取得 virtual String getClassName() const noexcept; // 文字列表現取得 virtual String toString() const noexcept; // 同じクラスか否か virtual bool isSameClass(const Object &obj) const noexcept; // 比較 virtual bool equals(const Object &obj) const noexcept; // ハッシュコード virtual int hashCode() const noexcept; // クローン virtual std::unique_ptr<Object> clone() const noexcept; // notify void notify(); // notifyAll void notifyAll(); // wait void wait(); // wait void wait(int msec); // 出力用 friend std::ostream &operator<<(std::ostream &os, const Object &obj); private: mutable std::mutex mtx; std::condition_variable cv; }; } // namespace kcpp #endif // KCPP_OBJECT_HPP