/**
 * @file      lib.AbstractTask.hpp
 * @author    Sergey Baigudin, sergey@baigudin.software
 * @copyright 2022, Sergey Baigudin, Baigudin Software
 */
#ifndef LIB_ABSTRACTTASK_HPP_
#define LIB_ABSTRACTTASK_HPP_

#include "lib.NonCopyable.hpp"
#include "api.Task.hpp"

namespace eoos
{
namespace lib
{

/**
 * @class AbstractTask<A>
 * @brief Abstract task for the thread class.
 *
 * @tparam A Heap memory allocator class. 
 */
template <class A = Allocator>
class AbstractTask : public NonCopyable<A>, public api::Task
{
    typedef NonCopyable<A> Parent;

public:

    /**
     * @brief Constructor.
     */
    AbstractTask() 
        : NonCopyable<A>()
        , api::Task() {
    }

    /**
     * @brief Destructor.
     */
    virtual ~AbstractTask() {}

    /**
     * @copydoc eoos::api::Task::start()
     */        
    virtual void start() = 0;

    /**
     * @copydoc eoos::api::Object::isConstructed()
     */
    virtual bool_t isConstructed() const
    {
        return Parent::isConstructed();
    }

    /**
     * @copydoc eoos::api::Task::getStackSize()
     */
    virtual size_t getStackSize() const
    {
        return 0U;
    }

};

} // namespace lib
} // namespace eoos
#endif // LIB_ABSTRACTTASK_HPP_

Generated by OpenCppCoverage (Version: 0.9.9.0)