5#ifndef ICE_METRICSFUNCTIONAL_H
6#define ICE_METRICSFUNCTIONAL_H
11template<
typename R>
struct ReferenceWrapper
13 static R* get(
const R& v)
15 return const_cast<R*
>(&v);
19#ifdef ICE_CPP11_MAPPING
20template<
typename R>
struct ReferenceWrapper<::std::shared_ptr<R> >
22 static R* get(const ::std::shared_ptr<R>& v)
28template<
typename R>
struct ReferenceWrapper<const ::std::shared_ptr<R>& >
30 static R* get(const ::std::shared_ptr<R>& v)
36template<
typename R>
struct ReferenceWrapper<IceInternal::ProxyHandle<R> >
38 static R* get(
const IceInternal::ProxyHandle<R>& v)
44template<
typename R>
struct ReferenceWrapper<const IceInternal::ProxyHandle<R>& >
46 static R* get(
const IceInternal::ProxyHandle<R>& v)
52template<
typename R>
struct ReferenceWrapper<IceInternal::Handle<R> >
54 static R* get(
const IceInternal::Handle<R>& v)
60template<
typename R>
struct ReferenceWrapper<const IceInternal::Handle<R>& >
62 static R* get(
const IceInternal::Handle<R>& v)
69template<
typename R>
struct ReferenceWrapper<R*>
77template<
typename R>
struct ReferenceWrapper<const R&>
79 static R* get(
const R& v)
81 return const_cast<R*
>(&v);
91template<
class T,
typename Y,
typename Func>
struct ApplyOnMember
93 ApplyOnMember(Y T::*m, Func f) : func(f), member(m)
98 void operator()(
const R& v)
100 func(IceInternal::ReferenceWrapper<R>::get(v)->*member);
107template<
typename T>
struct Decrement
109 void operator()(T& v)
115template<
typename T>
struct Increment
117 void operator()(T& v)
123template<
typename T>
struct Add
125 Add(T v) : value(v) { }
128 void operator()(Y& v)
136template<
class T,
typename Y,
typename F> ApplyOnMember<T, Y, F> applyOnMember(Y T::*member, F func)
138 return ApplyOnMember<T, Y, F>(member, func);
141template<
class T,
typename Y,
typename V> ApplyOnMember<T, Y, Add<V> > add(Y T::*member, V value)
143 return applyOnMember(member, Add<V>(value));
146template<
class T,
typename Y> ApplyOnMember<T, Y, Increment<Y> > inc(Y T::*member)
148 return applyOnMember(member, Increment<Y>());
151template<
class T,
typename Y> ApplyOnMember<T, Y, Decrement<Y> > dec(Y T::*member)
153 return applyOnMember(member, Decrement<Y>());
T * get() const
Definition Handle.h:25