00001 #ifndef COMMONS_DELEGATES_H
00002 #define COMMONS_DELEGATES_H
00003
00004 #include <boost/function.hpp>
00005 #include <boost/scoped_ptr.hpp>
00006 #include <iostream>
00007
00008 namespace commons
00009 {
00010
00011 using namespace boost;
00012 using namespace std;
00013
00014 typedef std::function<void()> fn;
00015
00016 void
00017 swallow(const fn f) {
00018 try { f(); }
00019 catch (std::exception &ex) { cerr << ex.what() << endl; }
00020 }
00021
00025 void
00026 run_function0(const void *p)
00027 {
00028 scoped_ptr<const fn> pf(reinterpret_cast<const fn*>(p));
00029 (*pf)();
00030 }
00031
00035 void*
00036 run_function0_null(void* p)
00037 {
00038 run_function0(p);
00039 return NULL;
00040 }
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00057
00058 class finally {
00059 public:
00060 finally(const fn &f): f_(f) {}
00061 ~finally() { f_(); }
00062 private:
00063 fn f_;
00064 };
00065
00066 }
00067
00068 #endif