From: Jonathan Lebon Date: Tue, 18 Feb 2014 20:22:29 +0000 (-0500) Subject: template-ify iterate_over_libraries() X-Git-Tag: release-2.5~265^2^2~4 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=bbbc7241cc21e181734acc61f35d2479ef3cf68d;p=systemtap.git template-ify iterate_over_libraries() --- diff --git a/dwflpp.cxx b/dwflpp.cxx index 7093e9da0..7d97aef38 100644 --- a/dwflpp.cxx +++ b/dwflpp.cxx @@ -1220,8 +1220,9 @@ dwflpp::iterate_over_notes(void *object, void (*callback)(void*, /* For each entry in the .dynamic section in the current module call 'callback' * returning 'object' in case 'callback' is a method */ -void -dwflpp::iterate_over_libraries (void (*callback)(void *object, const char *arg), void *q) +template<> void +dwflpp::iterate_over_libraries(void (*callback)(void*, const char*), + void *data) { std::set added; string interpreter; @@ -1341,7 +1342,7 @@ dwflpp::iterate_over_libraries (void (*callback)(void *object, const char *arg), it++) { string modname = *it; - (callback) (q, modname.c_str()); + (callback) (data, modname.c_str()); } } diff --git a/dwflpp.h b/dwflpp.h index cf0ced7e3..b2264c1ba 100644 --- a/dwflpp.h +++ b/dwflpp.h @@ -289,6 +289,16 @@ struct dwflpp size_t))callback); } + template + void iterate_over_libraries (void (*callback)(T*, const char*), T *data) + { + // See comment block in iterate_over_modules() + iterate_over_libraries((void (*)(void*, + const char*))callback, + (void*)data); + } + + void iterate_over_srcfile_lines (char const * srcfile, int lines[2], bool need_single_match, @@ -323,10 +333,6 @@ struct dwflpp dwarf_query *), std::stack*callers=NULL); - void iterate_over_libraries (void (*callback)(void *object, - const char *data), void *data); - - int iterate_over_plt (void *object, void (*callback)(void *object, const char *name, size_t address)); @@ -599,6 +605,9 @@ dwflpp::iterate_over_notes(void *object, void (*callback)(void*, int, const char*, size_t)); +template<> void +dwflpp::iterate_over_libraries(void (*callback)(void*, const char*), + void *data); #endif // DWFLPP_H diff --git a/tapsets.cxx b/tapsets.cxx index 2ccf35de5..ae406b188 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -629,7 +629,7 @@ struct base_query string const & k, long & v); static bool get_number_param(literal_map_t const & params, string const & k, Dwarf_Addr & v); - static void query_library_callback (void *object, const char *data); + static void query_library_callback (base_query *me, const char *data); static void query_plt_callback (void *object, const char *link, size_t addr); virtual void query_library (const char *data) = 0; virtual void query_plt (const char *link, size_t addr) = 0; @@ -2234,9 +2234,8 @@ query_module (Dwfl_Module *mod, void -base_query::query_library_callback (void *q, const char *data) +base_query::query_library_callback (base_query *me, const char *data) { - base_query *me = (base_query*)q; me->query_library (data); } diff --git a/translate.cxx b/translate.cxx index 1214dd0f9..20dfc7d7c 100644 --- a/translate.cxx +++ b/translate.cxx @@ -6364,9 +6364,8 @@ void emit_symbol_data_done (unwindsym_dump_context*, systemtap_session&); void -add_unwindsym_iol_callback (void *q, const char *data) +add_unwindsym_iol_callback (set *added, const char *data) { - std::set *added = (std::set*)q; added->insert (string (data)); }