1 #ifndef TRACE_SOURCE_ACCESSOR_H
2 #define TRACE_SOURCE_ACCESSOR_H
5 #include "object-base.h"
11 class TraceSourceAccessor : public ObjectBase
14 TraceSourceAccessor ();
15 virtual ~TraceSourceAccessor ();
16 void Ref (void) const;
17 void Unref (void) const;
19 virtual bool Connect (ObjectBase *obj, const CallbackBase &cb) const = 0;
20 virtual bool ConnectWithContext (ObjectBase *obj, std::string context, const CallbackBase &cb) const = 0;
21 virtual bool Disconnect (ObjectBase *obj, const CallbackBase &cb) const = 0;
23 mutable uint32_t m_count;
27 Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a);
33 template <typename T, typename SOURCE>
34 Ptr<const TraceSourceAccessor>
35 DoMakeTraceSourceAccessor (SOURCE T::*a)
37 struct Accessor : public TraceSourceAccessor
39 virtual bool Connect (ObjectBase *obj, const CallbackBase &cb) const {
40 T *p = dynamic_cast<T*> (obj);
45 (p->*m_source).Connect (cb);
48 virtual bool ConnectWithContext (ObjectBase *obj, std::string context, const CallbackBase &cb) const {
49 T *p = dynamic_cast<T*> (obj);
54 (p->*m_source).ConnectWithContext (cb, context);
57 virtual bool Disconnect (ObjectBase *obj, const CallbackBase &cb) const {
58 T *p = dynamic_cast<T*> (obj);
63 (p->*m_source).Disconnect (cb);
67 } *accessor = new Accessor ();
68 accessor->m_source = a;
69 return Ptr<const TraceSourceAccessor> (accessor, false);
73 Ptr<const TraceSourceAccessor> MakeTraceSourceAccessor (T a)
75 return DoMakeTraceSourceAccessor (a);
81 #endif /* TRACE_SOURCE_ACCESSOR_H */