summaryrefslogtreecommitdiff
path: root/cpp/include/Ice/MetricsAdminI.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/MetricsAdminI.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/MetricsAdminI.h')
-rw-r--r--cpp/include/Ice/MetricsAdminI.h90
1 files changed, 54 insertions, 36 deletions
diff --git a/cpp/include/Ice/MetricsAdminI.h b/cpp/include/Ice/MetricsAdminI.h
index d293201cde2..bd58a673435 100644
--- a/cpp/include/Ice/MetricsAdminI.h
+++ b/cpp/include/Ice/MetricsAdminI.h
@@ -17,7 +17,7 @@
#include <Ice/Metrics.h>
#ifdef _MSC_VER
-# define ICE_CPP11_REGEXP
+# define ICE_CPP11_COMPILER_REGEXP
#endif
#ifdef __MINGW32__
@@ -25,7 +25,7 @@
// No regexp support with MinGW, when MinGW C++11 mode is not experimental
// we can use std::regex.
//
-#elif defined(ICE_CPP11_REGEXP)
+#elif defined(ICE_CPP11_COMPILER_REGEXP)
# include <regex>
#else
# include <regex.h>
@@ -44,14 +44,17 @@ template<typename T> class MetricsHelperT;
namespace IceInternal
{
-class ICE_API MetricsMapI : public IceUtil::Shared
+class ICE_API MetricsMapI;
+ICE_DEFINE_PTR(MetricsMapIPtr, MetricsMapI);
+
+class ICE_API MetricsMapI : public ICE_ENABLE_SHARED_FROM_THIS(MetricsMapI)
{
public:
class ICE_API RegExp : public IceUtil::Shared
{
public:
-
+
RegExp(const std::string&, const std::string&);
~RegExp();
@@ -73,7 +76,7 @@ public:
private:
bool match(const std::string&);
-
+
const std::string _attribute;
#ifdef __MINGW32__
@@ -81,7 +84,7 @@ public:
// No regexp support with MinGW, when MinGW C++11 mode is not experimental
// we can use std::regex.
//
-#elif defined(ICE_CPP11_REGEXP)
+#elif defined(ICE_CPP11_COMPILER_REGEXP)
# if _MSC_VER < 1600
std::tr1::regex _regex;
# else
@@ -89,9 +92,9 @@ public:
# endif
#else
regex_t _preg;
-#endif
+#endif
};
- typedef IceUtil::Handle<RegExp> RegExpPtr;
+ ICE_DEFINE_PTR(RegExpPtr, RegExp);
MetricsMapI(const std::string&, const Ice::PropertiesPtr&);
MetricsMapI(const MetricsMapI&);
@@ -102,7 +105,7 @@ public:
virtual IceMX::MetricsFailures getFailures(const std::string&) = 0;
virtual IceMX::MetricsMap getMetrics() const = 0;
- virtual MetricsMapI* clone() const = 0;
+ virtual MetricsMapIPtr clone() const = 0;
const Ice::PropertyDict& getProperties() const;
@@ -115,7 +118,6 @@ protected:
const std::vector<RegExpPtr> _accept;
const std::vector<RegExpPtr> _reject;
};
-typedef IceUtil::Handle<MetricsMapI> MetricsMapIPtr;
class ICE_API MetricsMapFactory : public Ice::LocalObject
{
@@ -124,34 +126,39 @@ public:
MetricsMapFactory(IceMX::Updater*);
virtual MetricsMapIPtr create(const std::string&, const Ice::PropertiesPtr&) = 0;
-
+
void update();
private:
-
+
IceMX::Updater* _updater;
};
-typedef IceUtil::Handle<MetricsMapFactory> MetricsMapFactoryPtr;
+ICE_DEFINE_PTR(MetricsMapFactoryPtr, MetricsMapFactory);
template<class MetricsType> class MetricsMapT : public MetricsMapI, private IceUtil::Mutex
{
public:
typedef MetricsType T;
- typedef IceInternal::Handle<MetricsType> TPtr;
+ typedef ICE_INTERNAL_HANDLE<MetricsType> TPtr;
- typedef IceUtil::Handle<MetricsMapT> MetricsMapTPtr;
+ ICE_DEFINE_PTR(MetricsMapTPtr, MetricsMapT);
typedef IceMX::MetricsMap MetricsType::* SubMapMember;
class EntryT;
- typedef IceUtil::Handle<EntryT> EntryTPtr;
+ ICE_DEFINE_PTR(EntryTPtr, EntryT);
- class EntryT : public Ice::LocalObject
+ class EntryT
+#ifdef ICE_CPP11_MAPPING
+ : public ::std::enable_shared_from_this<EntryT>
+#else
+ : public Ice::LocalObject
+#endif
{
public:
- EntryT(MetricsMapT* map, const TPtr& object, const typename std::list<EntryTPtr>::iterator& p) :
+ EntryT(MetricsMapT* map, const TPtr& object, const typename std::list<EntryTPtr>::iterator& p) :
_map(map), _object(object), _detachedPos(p)
{
}
@@ -166,7 +173,7 @@ public:
}
}
- void
+ void
failed(const std::string& exceptionName)
{
IceUtil::Mutex::Lock sync(*_map);
@@ -180,7 +187,7 @@ public:
MetricsMapIPtr m;
{
IceUtil::Mutex::Lock sync(*_map);
- typename std::map<std::string, std::pair<MetricsMapIPtr, SubMapMember> >::iterator p =
+ typename std::map<std::string, std::pair<MetricsMapIPtr, SubMapMember> >::iterator p =
_subMaps.find(mapName);
if(p == _subMaps.end())
{
@@ -196,7 +203,7 @@ public:
}
m = p->second.first;
}
-
+
MetricsMapT<MemberMetricsType>* map = dynamic_cast<MetricsMapT<MemberMetricsType>*>(m.get());
assert(map);
return map->getMatching(helper);
@@ -209,7 +216,11 @@ public:
_object->totalLifetime += lifetime;
if(--_object->current == 0)
{
+#ifdef ICE_CPP11_MAPPING
+ _map->detached(this->shared_from_this());
+#else
_map->detached(this);
+#endif
}
}
@@ -241,7 +252,7 @@ public:
IceMX::MetricsPtr
clone() const
{
- TPtr metrics = TPtr::dynamicCast(_object->ice_clone());
+ TPtr metrics = ICE_DYNAMIC_CAST(T, _object->ice_clone());
for(typename std::map<std::string, std::pair<MetricsMapIPtr, SubMapMember> >::const_iterator p =
_subMaps.begin(); p != _subMaps.end(); ++p)
{
@@ -364,9 +375,13 @@ public:
_subMaps.find(subMapName);
if(p != _subMaps.end())
{
+#ifdef ICE_CPP11_MAPPING
+ return std::pair<MetricsMapIPtr, SubMapMember>(p->second.second->clone()->shared_from_this(), p->second.first);
+#else
return std::pair<MetricsMapIPtr, SubMapMember>(p->second.second->clone(), p->second.first);
+#endif
}
- return std::pair<MetricsMapIPtr, SubMapMember>(MetricsMapIPtr(), static_cast<SubMapMember>(0));
+ return std::pair<MetricsMapIPtr, SubMapMember>(MetricsMapIPtr(ICE_NULLPTR), static_cast<SubMapMember>(0));
}
EntryTPtr
@@ -440,10 +455,10 @@ public:
typename std::map<std::string, EntryTPtr>::const_iterator p = _objects.find(key);
if(p == _objects.end())
{
- TPtr t = new T();
+ TPtr t = ICE_MAKE_SHARED(T);
t->id = key;
p = _objects.insert(typename std::map<std::string, EntryTPtr>::value_type(
- key, new EntryT(this, t, _detachedQueue.end()))).first;
+ key, ICE_MAKE_SHARED(EntryT, this, t, _detachedQueue.end()))).first;
}
p->second->attach(helper);
return p->second;
@@ -451,12 +466,12 @@ public:
private:
- virtual MetricsMapI* clone() const
+ virtual MetricsMapIPtr clone() const
{
- return new MetricsMapT<MetricsType>(*this);
+ return ICE_MAKE_SHARED(MetricsMapT<MetricsType>, *this);
}
- void detached(EntryT* entry)
+ void detached(EntryTPtr entry)
{
// This is called with the map mutex locked.
@@ -529,14 +544,14 @@ public:
virtual MetricsMapIPtr
create(const std::string& mapPrefix, const Ice::PropertiesPtr& properties)
{
- return new MetricsMapT<MetricsType>(mapPrefix, properties, _subMaps);
+ return ICE_MAKE_SHARED(MetricsMapT<MetricsType>, mapPrefix, properties, _subMaps);
}
template<class SubMapMetricsType> void
registerSubMap(const std::string& subMap, IceMX::MetricsMap MetricsType::* member)
{
_subMaps[subMap] = std::pair<IceMX::MetricsMap MetricsType::*,
- MetricsMapFactoryPtr>(member, new MetricsMapFactoryT<SubMapMetricsType>(0));
+ MetricsMapFactoryPtr>(member, ICE_MAKE_SHARED(MetricsMapFactoryT<SubMapMetricsType>, ICE_NULLPTR));
}
private:
@@ -569,7 +584,7 @@ private:
const std::string _name;
std::map<std::string, MetricsMapIPtr> _maps;
};
-typedef IceUtil::Handle<MetricsViewI> MetricsViewIPtr;
+ICE_DEFINE_PTR(MetricsViewIPtr, MetricsViewI);
class ICE_API MetricsAdminI : public IceMX::MetricsAdmin, public Ice::PropertiesAdminUpdateCallback,
private IceUtil::Mutex
@@ -583,14 +598,14 @@ public:
void updateViews();
- template<class MetricsType> void
+ template<class MetricsType> void
registerMap(const std::string& map, IceMX::Updater* updater)
{
bool updated;
MetricsMapFactoryPtr factory;
{
Lock sync(*this);
- factory = new MetricsMapFactoryT<MetricsType>(updater);
+ factory = ICE_MAKE_SHARED(MetricsMapFactoryT<MetricsType>, updater);
_factories[map] = factory;
updated = addOrUpdateMap(map, factory);
}
@@ -604,16 +619,19 @@ public:
registerSubMap(const std::string& map, const std::string& subMap, IceMX::MetricsMap MetricsType::* member)
{
bool updated;
- IceUtil::Handle<MetricsMapFactoryT<MetricsType> > factory;
+ ICE_HANDLE<MetricsMapFactoryT<MetricsType> > factory;
{
Lock sync(*this);
-
std::map<std::string, MetricsMapFactoryPtr>::const_iterator p = _factories.find(map);
if(p == _factories.end())
{
return;
}
+#ifdef ICE_CPP11_MAPPING
+ factory = ::std::dynamic_pointer_cast<MetricsMapFactoryT<MetricsType>>(p->second);
+#else
factory = dynamic_cast<MetricsMapFactoryT<MetricsType>*>(p->second.get());
+#endif
factory->template registerSubMap<MemberMetricsType>(subMap, member);
removeMap(map);
updated = addOrUpdateMap(map, factory);
@@ -655,7 +673,7 @@ private:
const Ice::LoggerPtr _logger;
Ice::PropertiesPtr _properties;
};
-typedef IceUtil::Handle<MetricsAdminI> MetricsAdminIPtr;
+ICE_DEFINE_PTR(MetricsAdminIPtr, MetricsAdminI);
};