summaryrefslogtreecommitdiff
path: root/cpp/include/Ice/MetricsObserverI.h
diff options
context:
space:
mode:
authorJose <jose@zeroc.com>2015-12-01 17:36:19 +0100
committerJose <jose@zeroc.com>2015-12-01 17:36:19 +0100
commit2029ff368e49fae489b8ec8fc12f7d126b182dfb (patch)
tree6075d652b7851831c39e6f22004d8720864f1a60 /cpp/include/Ice/MetricsObserverI.h
parentThe default LMDB map size for IceGrid and IceStorm is now 10MB (Windows) (diff)
downloadice-2029ff368e49fae489b8ec8fc12f7d126b182dfb.tar.bz2
ice-2029ff368e49fae489b8ec8fc12f7d126b182dfb.tar.xz
ice-2029ff368e49fae489b8ec8fc12f7d126b182dfb.zip
C++11 mapping initial commit
Diffstat (limited to 'cpp/include/Ice/MetricsObserverI.h')
-rw-r--r--cpp/include/Ice/MetricsObserverI.h62
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);