/**
 * @file      sys.Object.hpp
 * @author    Sergey Baigudin, sergey@baigudin.software
 * @copyright 2014-2022, Sergey Baigudin, Baigudin Software
 */
#ifndef SYS_OBJECT_HPP_
#define SYS_OBJECT_HPP_

#include "lib.Object.hpp"
#include "sys.Types.hpp"

namespace eoos
{
namespace sys
{

/**
 * @class Object
 * @brief Root class of the operating system class hierarchy.
 */
class Object : public lib::Object<>
{
    using Parent = lib::Object<>;

public:

    /**
     * @brief Constructor.
     */
    Object() = default;

    /**
     * @brief Destructor.
     */
    ~Object() override = default;
    
protected:

    /**
     * @copydoc eoos::Object::Object(Object const&)
     */
    Object(Object const& obj) noexcept 
        : lib::Object<>(obj) {
    } 
    
    /**
     * @copydoc eoos::Object::operator=(Object const&)
     */       
    Object& operator=(Object const& obj) & noexcept ///< SCA AUTOSAR-C++14 Justified Rule A10-2-1
    {
        Parent::operator=(obj);
        return *this;
    }    

    /**
     * @copydoc eoos::Object::Object(Object&&)
     */       
    Object(Object&& obj) noexcept ///< SCA AUTOSAR-C++14 Defected Rule A8-4-8
        : lib::Object<>( lib::move(obj) ) {
    }
    
    /**
     * @copydoc eoos::Object::operator=(Object&&)
     */
    Object& operator=(Object&& obj) & noexcept ///< SCA AUTOSAR-C++14 Justified Rule A10-2-1 and Defected Rule A8-4-8
    {
        Parent::operator=( lib::move(obj) );
        return *this;
    }

};

} // namespace sys
} // namespace eoos
#endif // SYS_OBJECT_HPP_

Generated by OpenCppCoverage (Version: 0.9.9.0)