#ifndef OBJECT_HPP_INCLUDED
#define OBJECT_HPP_INCLUDED

#include <string>

namespace Internal
{
    class Class;
    class Object
    {
        public:
            void* Obj = nullptr;

            Object(const void* Obj = nullptr);
            Object(Object&& Obj);
            Object(const Object& Obj);
            Object& operator=(Object&& Obj);
            Object& operator=(const Object& Obj);

            bool operator==(const Object& O) const;
            bool operator!=(const Object& O) const;
            operator bool() const;
            operator void*() const;

            bool Equals(Object O) const;
            bool InstanceOf(Class C) const;

            virtual ~Object();
    };
}

#endif // OBJECT_HPP_INCLUDED
