Program Listing for File transaction.h#

Return to documentation for file (data_dispatch_service\transaction.h)

#ifndef TRANSACTION_H
#define TRANSACTION_H

#include <support/interface_ptr.h>

// Forward declaration
class CDispatchService;
class CSignal;

class CTransaction : public sdv::IInterfaceAccess, public sdv::IObjectDestroy
{
public:
    explicit CTransaction(CDispatchService& rDispatchSvc);

    // Interface map
    BEGIN_SDV_INTERFACE_MAP()
        SDV_INTERFACE_ENTRY(sdv::IInterfaceAccess)
        SDV_INTERFACE_ENTRY(sdv::IObjectDestroy)
    END_SDV_INTERFACE_MAP()

    virtual void DestroyObject() override;

    uint64_t GetReadTransactionID() const;

    void DeferWrite(CSignal& rSignal, sdv::any_t& ranyVal);

    void FinalizeWrite();

    void SetIterator(std::list<CTransaction>::iterator itTransaction);

    std::list<CTransaction>::iterator GetIterator() const;

private:

    enum class ETransactionType
    {
        undefined = 0,
        read_transaction = 1,
        write_transaction = 2,
    };

    sdv::CLifetimeCookie                m_cookie = sdv::CreateLifetimeCookie();
    CDispatchService&                   m_rDispatchSvc;
    mutable ETransactionType            m_eTransactionType = ETransactionType::undefined;
    std::mutex                          m_mtxDeferredWriteSignalMap;
    std::map<CSignal*, sdv::any_t>      m_mapDeferredWriteSignalMap;
    uint64_t                            m_uiReadTransactionID = 0ull;
    std::list<CTransaction>::iterator m_itTransaction{};
};

#endif // !defined TRANSACTION_H