ormthread.h 2.49 KB
#ifndef OSDEV_COMPONENTS_ORMTHREAD_H
#define OSDEV_COMPONENTS_ORMTHREAD_H

#include <QThread>
#include <QSharedPointer>

#include "ormreldata.h"

/*  ______________________________________
 * / Good day to deal with people in high \
 * | places; particularly lonely          |
 * \ stewardesses.                        /
 *  --------------------------------------
 *    \
 *     \
 *         .--.
 *        |o_o |
 *        |:_/ |
 *       //   \ \
 *      (|     | )
 *     /'\_   _/`\
 *     \___)=(___/
 *//*!
 *  \brief  This class *manages* the thread, the ORM layer will be started in.
 *          Derived from QThread it isn't the thread itself but implements the
 *          'run()' method that'll start the thread. (QThread isn't meant to be
 *          instantiated. It has to be derived.. :) )
 *
 *          And sometimes it can be a Stewardess. That's polymorphism for yah!
 */
namespace osdev  {
namespace components {

class ORMThread : public QThread
{
    Q_OBJECT

public:
    ORMThread();

    // Deleted copy-constructor
    ORMThread( const ORMThread& ) = delete;
    ORMThread( const ORMThread&& ) = delete;
    ORMThread& operator=( const ORMThread& ) = delete;
    ORMThread& operator=( const ORMThread&& ) = delete;

    /*!
     * \brief Destructor
     */
    virtual ~ORMThread();

    /*!
     * \brief   Override from QThread. This will actually create and start the thread.
     *          Objects used here are "moved" to the new thread and run
     */
    void run() override;

    /*!
     * \brief   Send the data to the intended thread.
     * \param   data Data coming from the plugin. Ownership is moved to the thread and that
     *          specific thread is responsible for cleaning up.
     */
    void dataToThread( const QSharedPointer<ORMRelData>& data );

signals:
    /*!
     * \brief   Used to send the datastructure to the thread.
     * \param   data Data coming from the plugin.
     */
    void signalSendData( const QSharedPointer<ORMRelData>& data );

    /*!
     * \brief   If the thread is unable to process the data that was sent, it will "reject" this.
     *          Normally it would then be send to a subsystem, capable of storing the data and
     *          resend it for re-processing.
     * \param   data Data originally comming from the plugin (it can be enriched along the way).
     */
    void signalRejectedData( const QSharedPointer<ORMRelData>& data );

};


}   /* End namespace components */
}   /* End namespace osdev  */

#endif  /* OSDEV_COMPONENTS_ORMTHREAD_H */