From 2bd0fb01215810241ca1f2831893bef01fdd64e7 Mon Sep 17 00:00:00 2001 From: lintao <lintao51@gmail.com> Date: Wed, 7 Aug 2019 16:57:16 +0800 Subject: [PATCH] add an example of a service and an alg to use it. --- Examples/CMakeLists.txt | 9 ++++++- Examples/Examples/IFirstSvc.h | 14 +++++++++++ Examples/src/FirstSvc/FirstSvc.cpp | 25 +++++++++++++++++++ Examples/src/FirstSvc/FirstSvc.h | 17 +++++++++++++ Examples/src/SecondAlg/SecondAlg.cpp | 36 ++++++++++++++++++++++++++++ Examples/src/SecondAlg/SecondAlg.h | 24 +++++++++++++++++++ 6 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 Examples/Examples/IFirstSvc.h create mode 100644 Examples/src/FirstSvc/FirstSvc.cpp create mode 100644 Examples/src/FirstSvc/FirstSvc.h create mode 100644 Examples/src/SecondAlg/SecondAlg.cpp create mode 100644 Examples/src/SecondAlg/SecondAlg.h diff --git a/Examples/CMakeLists.txt b/Examples/CMakeLists.txt index 4ea66c94..da2a23ef 100644 --- a/Examples/CMakeLists.txt +++ b/Examples/CMakeLists.txt @@ -3,13 +3,20 @@ gaudi_subdir(Examples v0r0) set(Examples_srcs src/HelloWorld/*.cpp + src/FirstSvc/*.cpp + src/SecondAlg/*.cpp ) +# Headers and Libraries + +gaudi_install_headers(Examples) + +# Modules gaudi_add_module(Examples ${Examples_srcs} INCLUDE_DIRS GaudiKernel LINK_LIBRARIES GaudiKernel ) -# Examples +# Unit tests gaudi_add_test(HelloAlg FRAMEWORK options/helloalg.py) \ No newline at end of file diff --git a/Examples/Examples/IFirstSvc.h b/Examples/Examples/IFirstSvc.h new file mode 100644 index 00000000..a8634cfa --- /dev/null +++ b/Examples/Examples/IFirstSvc.h @@ -0,0 +1,14 @@ +#ifndef IFirstSvc_h +#define IFirstSvc_h + +#include "GaudiKernel/IService.h" + +class IFirstSvc: virtual public IInterface { +public: + DeclareInterfaceID(IFirstSvc, 0, 1); // major/minor version + + virtual void shoot() = 0; + +}; + +#endif diff --git a/Examples/src/FirstSvc/FirstSvc.cpp b/Examples/src/FirstSvc/FirstSvc.cpp new file mode 100644 index 00000000..f188a8e2 --- /dev/null +++ b/Examples/src/FirstSvc/FirstSvc.cpp @@ -0,0 +1,25 @@ +#include "FirstSvc.h" + +DECLARE_COMPONENT(FirstSvc) + +StatusCode +FirstSvc::initialize() { + StatusCode sc = Service::initialize(); + + return sc; +} + +StatusCode +FirstSvc::finalize() { + // clear or reset + + // + StatusCode sc = Service::finalize(); + return sc; +} + +void +FirstSvc::shoot() { + msg() << "shoot it." << endmsg; + +} diff --git a/Examples/src/FirstSvc/FirstSvc.h b/Examples/src/FirstSvc/FirstSvc.h new file mode 100644 index 00000000..25315673 --- /dev/null +++ b/Examples/src/FirstSvc/FirstSvc.h @@ -0,0 +1,17 @@ +#ifndef FirstSvc_h +#define FirstSvc_h + +#include "Examples/IFirstSvc.h" +#include <GaudiKernel/Service.h> + +class FirstSvc: public extends<Service, IFirstSvc> { +public: + using extends::extends; + + StatusCode initialize() override; + StatusCode finalize() override; + + void shoot() override; +}; + +#endif diff --git a/Examples/src/SecondAlg/SecondAlg.cpp b/Examples/src/SecondAlg/SecondAlg.cpp new file mode 100644 index 00000000..fc7f1690 --- /dev/null +++ b/Examples/src/SecondAlg/SecondAlg.cpp @@ -0,0 +1,36 @@ +#include "SecondAlg.h" + +DECLARE_COMPONENT(SecondAlg) + +SecondAlg::SecondAlg(const std::string& name, ISvcLocator* pSvcLocator) +: Algorithm(name, pSvcLocator) { + +} + +StatusCode +SecondAlg::initialize() { + StatusCode sc; + + info() << "Retrieving the FirstSvc... " << endmsg; + + m_firstsvc = service("FirstSvc"); + + return sc; +} + +StatusCode +SecondAlg::execute() { + StatusCode sc; + + m_firstsvc->shoot(); + + return sc; +} + +StatusCode +SecondAlg::finalize() { + StatusCode sc; + return sc; +} + + diff --git a/Examples/src/SecondAlg/SecondAlg.h b/Examples/src/SecondAlg/SecondAlg.h new file mode 100644 index 00000000..e96306c8 --- /dev/null +++ b/Examples/src/SecondAlg/SecondAlg.h @@ -0,0 +1,24 @@ +#ifndef SecondAlg_h +#define SecondAlg_h + +#include <GaudiKernel/Algorithm.h> +#include <GaudiKernel/Property.h> + +#include "Examples/IFirstSvc.h" + +// The second algorithm shows how to invoke the services. + +class SecondAlg: public Algorithm { +public: + SecondAlg(const std::string& name, ISvcLocator* pSvcLocator); + + StatusCode initialize() override; + StatusCode execute() override; + StatusCode finalize() override; + +private: + SmartIF<IFirstSvc> m_firstsvc; +}; + + +#endif -- GitLab