This commit is contained in:
2015-05-24 01:53:39 +02:00
parent 13c182c82b
commit 96ca9d0d8a
12 changed files with 23 additions and 18 deletions
@@ -47,7 +47,8 @@ class Object
*/ */
template<class _Service> template<class _Service>
class Service class Service
: public virtual interface::Service { : public virtual interface::Service,
public Object {
public: public:
@@ -88,8 +89,8 @@ template <class... _Args> class Observable {};
* Convenience template merging the Object class and the Observable template into a single template. * Convenience template merging the Object class and the Observable template into a single template.
*/ */
template<class... _Args> class ObservableObject template<class... _Args> class ObservableObject
: public virtual Object, : public Object,
public virtual Observable<_Args...> {}; public Observable<_Args...> {};
@@ -97,8 +98,8 @@ template<class... _Args> class ObservableObject
* Convenience template merging the Service class and the Observable template into a single template. * Convenience template merging the Service class and the Observable template into a single template.
*/ */
template<class _Service, class... _Args> class ObservableService template<class _Service, class... _Args> class ObservableService
: public virtual Service<_Service>, : public Service<_Service>,
public virtual Observable<_Args...> {}; public Observable<_Args...> {};
@@ -24,6 +24,10 @@ namespace interface {
class Object { class Object {
public: public:
virtual ~Object() {} virtual ~Object() {}
template<class T> T* castPtr() {
return dynamic_cast<T*>(this);
}
}; };
@@ -23,7 +23,7 @@ namespace core {
*/ */
class CoreServiceImpl class CoreServiceImpl
: public virtual CoreService, : public virtual CoreService,
public virtual implementation::ObservableService<CoreServiceImpl, CoreServiceEvent> { public implementation::ObservableService<CoreServiceImpl, CoreServiceEvent> {
private: private:
@@ -59,7 +59,7 @@ class DeviceRepositoryServiceImpl;
**/ **/
class DeviceImpl class DeviceImpl
: public virtual Device, : public virtual Device,
public virtual implementation::ObservableObject<DeviceEventType, DeviceEvent> { public implementation::ObservableObject<DeviceEventType, DeviceEvent> {
private: private:
@@ -134,7 +134,7 @@ public:
**/ **/
class DeviceRepositoryServiceImpl class DeviceRepositoryServiceImpl
: public virtual DeviceRepositoryService, : public virtual DeviceRepositoryService,
public virtual implementation::ObservableService<DeviceRepositoryServiceImpl, DeviceEventType, DeviceEvent> { public implementation::ObservableService<DeviceRepositoryServiceImpl, DeviceEventType, DeviceEvent> {
private: private:
typedef std::map<std::string, std::shared_ptr<DeviceImpl>> devicesMap_t; typedef std::map<std::string, std::shared_ptr<DeviceImpl>> devicesMap_t;
@@ -49,7 +49,7 @@ class RulePackageImpl;
class RuleEngineServiceImpl : class RuleEngineServiceImpl :
public virtual RuleEngineService, public virtual RuleEngineService,
public virtual implementation::Service<RuleEngineServiceImpl> { public implementation::Service<RuleEngineServiceImpl> {
private: private:
typedef std::map<std::string, std::shared_ptr<rules::RulePackageImpl>> rulePkgMap_t; typedef std::map<std::string, std::shared_ptr<rules::RulePackageImpl>> rulePkgMap_t;
@@ -65,7 +65,7 @@ public:
static std::shared_ptr<RuleImpl> createRule(RulePackageImpl* parent, const std::string name, Variant raw); static std::shared_ptr<RuleImpl> createRule(RulePackageImpl* parent, const std::string name, Variant raw);
virtual RulePackage* getParent() noexcept { virtual RulePackage* getParent() noexcept {
return dynamic_cast<RulePackage*>(parent); return parent->castPtr<RulePackage>();
} }
virtual const std::string& getName() noexcept { virtual const std::string& getName() noexcept {
@@ -65,7 +65,7 @@ public:
const std::string language; const std::string language;
virtual service::ruleengine::RuleEngineService* getParent() noexcept override { virtual service::ruleengine::RuleEngineService* getParent() noexcept override {
return dynamic_cast<service::ruleengine::RuleEngineService*>(parent); return parent->castPtr<service::ruleengine::RuleEngineService>();
} }
virtual const std::string& getName() noexcept override { virtual const std::string& getName() noexcept override {
@@ -75,7 +75,7 @@ public:
class DeviceStatusMsgConditionFactory class DeviceStatusMsgConditionFactory
: public RuleConditionFactory { : public virtual RuleConditionFactory {
public: public:
virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override; virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override;
}; };
@@ -98,7 +98,7 @@ public:
class DeviceCommandMsgConditionFactory class DeviceCommandMsgConditionFactory
: public RuleConditionFactory { : public virtual RuleConditionFactory {
public: public:
virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override; virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override;
}; };
@@ -125,7 +125,7 @@ public:
class DeviceStateChangeConditionFactory class DeviceStateChangeConditionFactory
: public RuleConditionFactory { : public virtual RuleConditionFactory {
public: public:
virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override; virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override;
}; };
@@ -42,7 +42,7 @@ public:
class LogicalAndConditionFactory class LogicalAndConditionFactory
: public RuleConditionFactory { : public virtual RuleConditionFactory {
public: public:
virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override; virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override;
}; };
@@ -41,7 +41,7 @@ public:
class LogicalOrConditionFactory class LogicalOrConditionFactory
: public RuleConditionFactory { : public virtual RuleConditionFactory {
public: public:
virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override; virtual std::shared_ptr<RuleCondition> createCondition(rules::Rule* parent, const Variant& raw) override;
}; };
@@ -104,7 +104,7 @@ public:
**/ **/
class PyScriptingService class PyScriptingService
: public virtual service::scripting::ScriptingService, : public virtual service::scripting::ScriptingService,
public virtual implementation::Service<PyScriptingService> { public implementation::Service<PyScriptingService> {
private: private:
@@ -35,7 +35,7 @@ namespace webserver {
class WebServerServiceImpl; class WebServerServiceImpl;
class WebServerServiceImpl : class WebServerServiceImpl :
public virtual WebServerService, public virtual WebServerService,
public virtual implementation::Service<WebServerServiceImpl> { public implementation::Service<WebServerServiceImpl> {
private: private:
service::core::CoreService* coreService = nullptr; service::core::CoreService* coreService = nullptr;