29 #ifndef CREGISTEREDCALLBACKS_HPP_
30 #define CREGISTEREDCALLBACKS_HPP_
32 #include <sutil/CSingleton.hpp>
33 #include <sutil/CMappedList.hpp>
44 template <
typename Idx,
typename ArgumentTuple,
typename Data>
class CCallbackBase;
92 template<
typename Idx,
typename ArgumentTuple,
typename Data=
bool >
93 bool call(
const Idx& arg_callback_name, ArgumentTuple& args)
98 if(0 == mapped_callback) {
return false; }
106 callback->
call(args);
114 template<
typename CallbackClass,
typename Idx,
115 typename ArgumentTuple,
typename Data=
bool >
116 bool add(
const Idx& arg_callback_name)
119 return f.sutil::CCallbackBase<Idx, ArgumentTuple, Data>::
registerCallback(arg_callback_name);
122 template<
typename CallbackClass,
typename Idx,
123 typename ArgumentTuple,
typename Data>
124 bool add(
const Idx& arg_callback_name, Data* arg_data)
127 return f.sutil::CCallbackBase<Idx, ArgumentTuple, Data>::
registerCallback(arg_callback_name, arg_data);
131 template<
typename Idx>
132 bool list(std::vector<Idx>& idxlist)
133 {
typedef CMappedPointerList<Idx,CCallbackSuperBase<Idx>,
true> map;
135 if(NULL == m) {
return false; }
136 typename map::iterator it,ite;
138 for(it = m->begin(), ite = m->end();it!=ite;++it)
139 { idxlist.push_back(!it); }
149 template <
typename Idx>
150 class CRegisteredCallbacks :
private CSingleton<CMappedPointerList<Idx,CCallbackSuperBase<Idx>,true> >
153 typedef CSingleton<CMappedPointerList<Idx,CCallbackSuperBase<Idx>,
true> > singleton;
156 friend class CCallbackSuperBase<Idx>;
163 if(0 == mapped_callback) {
return false; }
173 static CMappedPointerList<Idx,CCallbackSuperBase<Idx>,
true>*
getCallbacks()
186 std::cerr<<
"\nCRegisteredCallbacks::registerCallback() Warning :"
187 <<
" The passed callback is already registered.";
194 create(arg_callback_name,arg_callback_object);
198 std::cerr<<
"\nCRegisteredCallbacks::registerCallback() Error :"
199 <<
" Failed to create callback in the callback mapped list.";
222 template <
typename Idx>
223 class CCallbackSuperBase
235 const Idx &arg_callback_name,
253 template <
typename Idx,
typename ArgumentTuple,
typename Data=
bool>
254 class CCallbackBase :
public CCallbackSuperBase<Idx>
260 virtual void call(ArgumentTuple& args) = 0;
263 virtual CCallbackBase<Idx, ArgumentTuple, Data>*
createObject()=0;
265 virtual bool registerCallback(
266 const Idx& arg_callback_name,
277 CCallbackBase<Idx,ArgumentTuple,Data>* obj =
createObject();
281 { obj->data_ = arg_data; }
285 dynamic_cast<CCallbackSuperBase<Idx>*
>(obj) );
287 {
delete obj;
return false; }
308 static bool resetCallbacks()
Definition: CRegisteredCallbacks.hpp:171
virtual ~CCallbackSuperBase()
Definition: CRegisteredCallbacks.hpp:229
static bool registerCallback(const Idx &arg_callback_name, CCallbackSuperBase< Idx > *arg_callback_object)
Definition: CRegisteredCallbacks.hpp:182
Definition: CRegisteredCallbacks.hpp:43
bool add(const Idx &arg_callback_name)
Definition: CRegisteredCallbacks.hpp:116
CCallbackSuperBase & operator=(const CCallbackSuperBase &)
virtual bool registerCallbackSuper(const Idx &arg_callback_name, CCallbackSuperBase *arg_obj)
Definition: CRegisteredCallbacks.hpp:236
static CMappedPointerList< Idx, CCallbackSuperBase< Idx >, true > * getCallbacks()
Definition: CRegisteredCallbacks.hpp:175
bool list(std::vector< Idx > &idxlist)
Definition: CRegisteredCallbacks.hpp:134
virtual T * at(const std::size_t arg_idx)
Definition: CMappedList.hpp:832
static bool callbackRegistered(const Idx &arg_callback_name)
Definition: CRegisteredCallbacks.hpp:162
virtual void call(ArgumentTuple &args)=0
static CMappedPointerList< Idx, CCallbackSuperBase< Idx >, true > * getData()
Definition: CRegisteredCallbacks.hpp:44
virtual CCallbackBase< Idx, ArgumentTuple, Data > * createObject()=0
CRegisteredCallbacks & operator=(const CRegisteredCallbacks &)
bool call(const Idx &arg_callback_name, ArgumentTuple &args)
Definition: CRegisteredCallbacks.hpp:93
virtual ~CCallbackBase()
Definition: CRegisteredCallbacks.hpp:295
CCallbackBase()
Definition: CRegisteredCallbacks.hpp:299
Definition: CRegisteredCallbacks.hpp:45
CCallbackSuperBase()
Definition: CRegisteredCallbacks.hpp:233