Program Listing for File transaction.h#
↰ Return to documentation for file (data_dispatch_service\transaction.h)
/********************************************************************************
* Copyright (c) 2025-2026 ZF Friedrichshafen AG
*
* This program and the accompanying materials are made available under the
* terms of the Apache License Version 2.0 which is available at
* https://www.apache.org/licenses/LICENSE-2.0
*
* SPDX-License-Identifier: Apache-2.0
*
* Contributors:
* Erik Verhoeven - initial API and implementation
********************************************************************************/
#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