/** * {{ namespace_abbr_upper }} Data Topic Client Interface * $Id$ * $HeadURL$ * $Author$ * Created by Christian Ehrlicher, SLSE, 2016-04-07 */ {% autoescape off %} // filename: {{ namespace_abbr }}_dtc_impl.h #pragma once #include <{{ include_prefix }}/{{ namespace_abbr }}_dtc.h> #include <{{ include_prefix }}/{{ namespace_abbr }}_dtc_types.h> #include <{{ include_prefix }}/logger.h> #include #if !defined(MAKE_SVC{{ namespace_abbr_upper }}CLIENT_LIB) #error "You are not allowed to include this file in your code!" #endif namespace {{ namespace }} { namespace Interface { template struct DtcConstraints { using DTC = typename UQ_DTC::element_type; using TOPIC = typename DTC::TopicType; }; template struct TopicConstraints {}; class DtcImpl {% if not custom_dtc_procs %}final {%endif %}: public Dtc { Q_OBJECT public: explicit DtcImpl(const std::shared_ptr &ddsConnector); ~DtcImpl(); bool enableAll(bool enable = true) override; {% for dt in dataTopics.member %} {% if dt.dtcImpl %} // // Data Topic '{{ dt.name }}' // public: bool enable{{ dt.name }}(bool enable = true) override final; bool is{{ dt.name }}Enabled() const override final { return m_dtc{{ dt.name }} != nullptr; } bool waitForHistoricalData{{ dt.name }}(int timeoutMSec = -1) override final; {% if dt.key.name %} QMap<{{ dt.key.cppType }}, {{ namespace }}::{{ dt.type }}> {{ dt.nameFlc }}s() override final; bool {{ dt.nameFlc }}s(const std::function &cb) override final; bool {{ dt.nameFlc }}s(const std::function &cb) override final; {{ namespace }}::{{ dt.type }} {{ dt.nameFlc }}({{ dt.key.cppTypeCr }} {{ dt.key.nameFlc }}) override final; {% else %} {{ namespace }}::{{ dt.type }} {{ dt.nameFlc }}() override final; {% endif %} {% endif %} {% endfor %} private: template bool checkEnabled(const DTC &dtc) const; template bool waitForHistoricalData(DTC &dtc, int timeoutMSec); template ::TOPIC, typename K = typename TopicConstraints::KEY> QMap getAll(const DTC &dtc) const; template ::TOPIC, typename K = typename TopicConstraints::KEY> T getOne(const DTC &dtc, const C &cont, const K &key) const; template ::TOPIC> bool iterateAll(const DTC &dtc, const C &cont, const std::function &cb) const; template ::TOPIC> bool iterateUntil(const DTC &dtc, const C &cont, const std::function &cb) const; protected: std::shared_ptr m_ddsConnector; {% for dt in dataTopics.member %} {% if dt.dtcImpl %} void {{ dt.nameFlc }}ChangedInternal(const {{ namespace }}::{{ dt.type }} &data, DataModification modType); std::unique_ptr m_dtc{{ dt.name }}; {% if dt.key.name %} QMap<{{ dt.key.cppType }}, {{ namespace }}::{{ dt.type }}> m_{{ dt.nameFlc }}Cont; {% else %} {{ namespace }}::{{ dt.type }} m_{{ dt.nameFlc }}; {% endif %} {% endif %} {% endfor %} LOGGER_T m_logger; }; } // namespace Interface } // namespace {{ namespace }} {% endautoescape %}