diff options
Diffstat (limited to 'cpp/include/Ice/MetricsObserverI.h')
-rw-r--r-- | cpp/include/Ice/MetricsObserverI.h | 62 |
1 files changed, 51 insertions, 11 deletions
diff --git a/cpp/include/Ice/MetricsObserverI.h b/cpp/include/Ice/MetricsObserverI.h index d87d62eecce..cedfcac6964 100644 --- a/cpp/include/Ice/MetricsObserverI.h +++ b/cpp/include/Ice/MetricsObserverI.h @@ -36,7 +36,7 @@ public: virtual std::string operator()(const std::string&) const = 0; - virtual void initMetrics(const IceInternal::Handle<T>&) const + virtual void initMetrics(const ICE_INTERNAL_HANDLE<T>&) const { // To be overriden in specialization to initialize state attributes } @@ -266,20 +266,28 @@ protected: }; }; -class Updater : public IceUtil::Shared +class Updater +#ifndef ICE_CPP11_MAPPING + : public IceUtil::Shared +#endif { public: virtual void update() = 0; }; -typedef IceUtil::Handle<Updater> UpdaterPtr; +ICE_DEFINE_PTR(UpdaterPtr, Updater); template<typename T> class UpdaterT : public Updater { public: +#ifdef ICE_CPP11_MAPPING + UpdaterT(const std::shared_ptr<T>& updater, void (T::*fn)()) : +#else UpdaterT(T* updater, void (T::*fn)()) : - _updater(updater), _fn(fn) +#endif + _updater(updater), + _fn(fn) { } @@ -290,22 +298,41 @@ public: private: +#ifdef ICE_CPP11_MAPPING + const ::std::shared_ptr<T> _updater; +#else const IceUtil::Handle<T> _updater; +#endif void (T::*_fn)(); }; -template<typename T> Updater* +#ifdef ICE_CPP11_MAPPING +template<typename T> UpdaterPtr +newUpdater(const std::shared_ptr<T>& updater, void (T::*fn)()) +{ + if(updater) + { + return std::make_shared<UpdaterT<T>>(updater, fn); + } + else + { + return nullptr; + } +} +#else +template<typename T> UpdaterPtr newUpdater(const IceInternal::Handle<T>& updater, void (T::*fn)()) { if(updater) { - return new UpdaterT<T>(updater.get(), fn); + return UpdaterPtr(new UpdaterT<T>(updater.get(), fn)); } else { return 0; } } +#endif template<typename T> class ObserverT : virtual public ::Ice::Instrumentation::Observer { @@ -394,7 +421,7 @@ public: return 0; } - template<typename ObserverImpl, typename ObserverMetricsType> IceInternal::Handle<ObserverImpl> + template<typename ObserverImpl, typename ObserverMetricsType> ICE_INTERNAL_HANDLE<ObserverImpl> getObserver(const std::string& mapName, const MetricsHelperT<ObserverMetricsType>& helper) { std::vector<typename IceInternal::MetricsMapT<ObserverMetricsType>::EntryTPtr> metricsObjects; @@ -412,7 +439,7 @@ public: return 0; } - IceInternal::Handle<ObserverImpl> obsv = new ObserverImpl(); + ICE_INTERNAL_HANDLE<ObserverImpl> obsv = ICE_MAKE_SHARED(ObserverImpl); obsv->init(helper, metricsObjects); return obsv; } @@ -429,10 +456,15 @@ class ObserverFactoryT : public Updater, private IceUtil::Mutex { public: +#ifdef ICE_CPP11_MAPPING + typedef ::std::shared_ptr<ObserverImplType> ObserverImplPtrType; + typedef typename ObserverImplType::MetricsType MetricsType; + typedef std::vector<::std::shared_ptr<IceInternal::MetricsMapT<MetricsType> > > MetricsMapSeqType; +#else typedef IceUtil::Handle<ObserverImplType> ObserverImplPtrType; typedef typename ObserverImplType::MetricsType MetricsType; - typedef std::vector<IceUtil::Handle<IceInternal::MetricsMapT<MetricsType> > > MetricsMapSeqType; +#endif ObserverFactoryT(const IceInternal::MetricsAdminIPtr& metrics, const std::string& name) : _metrics(metrics), _name(name), _enabled(0) @@ -472,7 +504,7 @@ public: return 0; } - ObserverImplPtrType obsv = new ObserverImplType(); + ObserverImplPtrType obsv = ICE_MAKE_SHARED(ObserverImplType); obsv->init(helper, metricsObjects); return obsv; } @@ -480,7 +512,11 @@ public: template<typename ObserverPtrType> ObserverImplPtrType getObserver(const MetricsHelperT<MetricsType>& helper, const ObserverPtrType& observer) { +#ifdef ICE_CPP11_MAPPING + ObserverImplPtrType old = ::std::dynamic_pointer_cast<ObserverImplType>(observer); +#else ObserverImplPtrType old = ObserverImplPtrType::dynamicCast(observer); +#endif if(!observer || !old) { return getObserver(helper); @@ -508,7 +544,7 @@ public: return 0; } - ObserverImplPtrType obsv = new ObserverImplType(); + ObserverImplPtrType obsv = ICE_MAKE_SHARED(ObserverImplType); obsv->init(helper, metricsObjects, old.get()); return obsv; } @@ -539,7 +575,11 @@ public: _maps.clear(); for(std::vector<IceInternal::MetricsMapIPtr>::const_iterator p = maps.begin(); p != maps.end(); ++p) { +#ifdef ICE_CPP11_MAPPING + _maps.push_back(::std::dynamic_pointer_cast<IceInternal::MetricsMapT<MetricsType>>(*p)); +#else _maps.push_back(IceUtil::Handle<IceInternal::MetricsMapT<MetricsType> >::dynamicCast(*p)); +#endif assert(_maps.back()); } _enabled.exchange(_maps.empty() ? 0 : 1); |