summaryrefslogtreecommitdiff
path: root/cpp/include/Ice/MetricsObserverI.h
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/include/Ice/MetricsObserverI.h')
-rw-r--r--cpp/include/Ice/MetricsObserverI.h81
1 files changed, 59 insertions, 22 deletions
diff --git a/cpp/include/Ice/MetricsObserverI.h b/cpp/include/Ice/MetricsObserverI.h
index 957c941a829..78237a96eac 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
}
@@ -237,6 +237,12 @@ protected:
return os.str();
}
+ static const std::string
+ toString(const Ice::ObjectPrxPtr& p)
+ {
+ return p->ice_toString();
+ }
+
static const std::string&
toString(const std::string& s)
{
@@ -266,20 +272,25 @@ protected:
};
};
-class Updater : public IceUtil::Shared
+class Updater : public ICE_SHARED
{
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,24 +301,39 @@ public:
private:
- const IceUtil::Handle<T> _updater;
+ const ICE_HANDLE<T> _updater;
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
+template<typename T> class ObserverT : public virtual ::Ice::Instrumentation::Observer
{
public:
@@ -367,7 +393,6 @@ public:
}
_previousDelay = previous->_previousDelay + previous->_watch.delay();
-
//
// Detach entries from previous observer which are no longer
// attached to this new observer.
@@ -391,10 +416,10 @@ public:
return *p;
}
}
- return 0;
+ return ICE_NULLPTR;
}
- 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;
@@ -409,10 +434,10 @@ public:
if(metricsObjects.empty())
{
- return 0;
+ return ICE_NULLPTR;
}
- IceInternal::Handle<ObserverImpl> obsv = new ObserverImpl();
+ ICE_INTERNAL_HANDLE<ObserverImpl> obsv = ICE_MAKE_SHARED(ObserverImpl);
obsv->init(helper, metricsObjects);
return obsv;
}
@@ -429,10 +454,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)
@@ -454,7 +484,7 @@ public:
IceUtil::Mutex::Lock sync(*this);
if(!_metrics)
{
- return 0;
+ return ICE_NULLPTR;
}
typename ObserverImplType::EntrySeqType metricsObjects;
@@ -469,10 +499,10 @@ public:
if(metricsObjects.empty())
{
- return 0;
+ return ICE_NULLPTR;
}
- ObserverImplPtrType obsv = new ObserverImplType();
+ ObserverImplPtrType obsv = ICE_MAKE_SHARED(ObserverImplType);
obsv->init(helper, metricsObjects);
return obsv;
}
@@ -480,16 +510,20 @@ 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);
}
-
IceUtil::Mutex::Lock sync(*this);
if(!_metrics)
{
- return 0;
+ return ICE_NULLPTR;
}
typename ObserverImplType::EntrySeqType metricsObjects;
@@ -501,14 +535,13 @@ public:
metricsObjects.push_back(entry);
}
}
-
if(metricsObjects.empty())
{
old->detach();
- return 0;
+ return ICE_NULLPTR;
}
- ObserverImplPtrType obsv = new ObserverImplType();
+ ObserverImplPtrType obsv = ICE_MAKE_SHARED(ObserverImplType);
obsv->init(helper, metricsObjects, old.get());
return obsv;
}
@@ -539,7 +572,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);