diff --git a/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Implementation.h b/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Implementation.h index dfa476f3..8209fa44 100644 --- a/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Implementation.h +++ b/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Implementation.h @@ -47,7 +47,8 @@ class Object */ template class Service - : public virtual interface::Service { + : public virtual interface::Service, + public Object { public: @@ -88,8 +89,8 @@ template class Observable {}; * Convenience template merging the Object class and the Observable template into a single template. */ template class ObservableObject - : public virtual Object, - public virtual Observable<_Args...> {}; + : public Object, + public Observable<_Args...> {}; @@ -97,8 +98,8 @@ template class ObservableObject * Convenience template merging the Service class and the Observable template into a single template. */ template class ObservableService - : public virtual Service<_Service>, - public virtual Observable<_Args...> {}; + : public Service<_Service>, + public Observable<_Args...> {}; diff --git a/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Interface.h b/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Interface.h index 463e047c..5e81173a 100644 --- a/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Interface.h +++ b/src/hos_cosgi_core/include/hos_cosgi_core/hos/cosgi/service/Interface.h @@ -24,6 +24,10 @@ namespace interface { class Object { public: virtual ~Object() {} + + template T* castPtr() { + return dynamic_cast(this); + } }; diff --git a/src/hos_cosgi_core/src/hos/cosgi/service/core/CoreServiceImpl.h b/src/hos_cosgi_core/src/hos/cosgi/service/core/CoreServiceImpl.h index dfd5819b..4bcef95e 100644 --- a/src/hos_cosgi_core/src/hos/cosgi/service/core/CoreServiceImpl.h +++ b/src/hos_cosgi_core/src/hos/cosgi/service/core/CoreServiceImpl.h @@ -23,7 +23,7 @@ namespace core { */ class CoreServiceImpl : public virtual CoreService, - public virtual implementation::ObservableService { + public implementation::ObservableService { private: diff --git a/src/hos_cosgi_devicerepository/src/hos/cosgi/service/devicerepository/DeviceRepositoryServiceImpl.h b/src/hos_cosgi_devicerepository/src/hos/cosgi/service/devicerepository/DeviceRepositoryServiceImpl.h index 2699a8bc..2d19b1a1 100644 --- a/src/hos_cosgi_devicerepository/src/hos/cosgi/service/devicerepository/DeviceRepositoryServiceImpl.h +++ b/src/hos_cosgi_devicerepository/src/hos/cosgi/service/devicerepository/DeviceRepositoryServiceImpl.h @@ -59,7 +59,7 @@ class DeviceRepositoryServiceImpl; **/ class DeviceImpl : public virtual Device, - public virtual implementation::ObservableObject { + public implementation::ObservableObject { private: @@ -134,7 +134,7 @@ public: **/ class DeviceRepositoryServiceImpl : public virtual DeviceRepositoryService, - public virtual implementation::ObservableService { + public implementation::ObservableService { private: typedef std::map> devicesMap_t; diff --git a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/RuleEngineServiceImpl.h b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/RuleEngineServiceImpl.h index b4351a8d..e9642891 100644 --- a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/RuleEngineServiceImpl.h +++ b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/RuleEngineServiceImpl.h @@ -49,7 +49,7 @@ class RulePackageImpl; class RuleEngineServiceImpl : public virtual RuleEngineService, - public virtual implementation::Service { + public implementation::Service { private: typedef std::map> rulePkgMap_t; diff --git a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RuleImpl.h b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RuleImpl.h index ba54de4f..92abfb45 100644 --- a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RuleImpl.h +++ b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RuleImpl.h @@ -65,7 +65,7 @@ public: static std::shared_ptr createRule(RulePackageImpl* parent, const std::string name, Variant raw); virtual RulePackage* getParent() noexcept { - return dynamic_cast(parent); + return parent->castPtr(); } virtual const std::string& getName() noexcept { diff --git a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RulePackageImpl.h b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RulePackageImpl.h index fc69e5ba..4b921994 100644 --- a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RulePackageImpl.h +++ b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/RulePackageImpl.h @@ -65,7 +65,7 @@ public: const std::string language; virtual service::ruleengine::RuleEngineService* getParent() noexcept override { - return dynamic_cast(parent); + return parent->castPtr(); } virtual const std::string& getName() noexcept override { diff --git a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/DeviceMsgCondition.h b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/DeviceMsgCondition.h index cf7054c2..3b079180 100644 --- a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/DeviceMsgCondition.h +++ b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/DeviceMsgCondition.h @@ -75,7 +75,7 @@ public: class DeviceStatusMsgConditionFactory - : public RuleConditionFactory { + : public virtual RuleConditionFactory { public: virtual std::shared_ptr createCondition(rules::Rule* parent, const Variant& raw) override; }; @@ -98,7 +98,7 @@ public: class DeviceCommandMsgConditionFactory - : public RuleConditionFactory { + : public virtual RuleConditionFactory { public: virtual std::shared_ptr createCondition(rules::Rule* parent, const Variant& raw) override; }; @@ -125,7 +125,7 @@ public: class DeviceStateChangeConditionFactory - : public RuleConditionFactory { + : public virtual RuleConditionFactory { public: virtual std::shared_ptr createCondition(rules::Rule* parent, const Variant& raw) override; }; diff --git a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalAndCondition.h b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalAndCondition.h index 4aff47c5..33b5537f 100644 --- a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalAndCondition.h +++ b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalAndCondition.h @@ -42,7 +42,7 @@ public: class LogicalAndConditionFactory - : public RuleConditionFactory { + : public virtual RuleConditionFactory { public: virtual std::shared_ptr createCondition(rules::Rule* parent, const Variant& raw) override; }; diff --git a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalOrCondition.h b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalOrCondition.h index cd545d02..5c0fd866 100644 --- a/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalOrCondition.h +++ b/src/hos_cosgi_ruleengine/src/hos/cosgi/service/ruleengine/rules/conditions/LogicalOrCondition.h @@ -41,7 +41,7 @@ public: class LogicalOrConditionFactory - : public RuleConditionFactory { + : public virtual RuleConditionFactory { public: virtual std::shared_ptr createCondition(rules::Rule* parent, const Variant& raw) override; }; diff --git a/src/hos_cosgi_scripting_python/src/hos/cosgi/service/scripting/python/PyScriptingServiceImpl.h b/src/hos_cosgi_scripting_python/src/hos/cosgi/service/scripting/python/PyScriptingServiceImpl.h index 3333fd5e..2207ed06 100644 --- a/src/hos_cosgi_scripting_python/src/hos/cosgi/service/scripting/python/PyScriptingServiceImpl.h +++ b/src/hos_cosgi_scripting_python/src/hos/cosgi/service/scripting/python/PyScriptingServiceImpl.h @@ -104,7 +104,7 @@ public: **/ class PyScriptingService : public virtual service::scripting::ScriptingService, - public virtual implementation::Service { + public implementation::Service { private: diff --git a/src/hos_cosgi_webserver/src/hos/cosgi/service/webserver/webserver_serviceimpl.h b/src/hos_cosgi_webserver/src/hos/cosgi/service/webserver/webserver_serviceimpl.h index 60633004..0d10d0e6 100644 --- a/src/hos_cosgi_webserver/src/hos/cosgi/service/webserver/webserver_serviceimpl.h +++ b/src/hos_cosgi_webserver/src/hos/cosgi/service/webserver/webserver_serviceimpl.h @@ -35,7 +35,7 @@ namespace webserver { class WebServerServiceImpl; class WebServerServiceImpl : public virtual WebServerService, - public virtual implementation::Service { + public implementation::Service { private: service::core::CoreService* coreService = nullptr;