diff options
author | Josh Stone <jistone@redhat.com> | 2009-09-02 16:43:58 -0700 |
---|---|---|
committer | Josh Stone <jistone@redhat.com> | 2009-09-02 17:13:14 -0700 |
commit | 64deb08509bf9682e7d3b8141399c5603edb2df2 (patch) | |
tree | 08618088f11078f203a98c00c5ac225a69b68738 /dwflpp.h | |
parent | aca66a36681ac7cbf7fcc2eac4dafc83d6559ef9 (diff) | |
download | systemtap-steved-64deb08509bf9682e7d3b8141399c5603edb2df2.tar.gz systemtap-steved-64deb08509bf9682e7d3b8141399c5603edb2df2.tar.xz systemtap-steved-64deb08509bf9682e7d3b8141399c5603edb2df2.zip |
Provide backward-compatible unordered_map/set
We were defining our own stap_map with a ::type to let us use typedefs
to use the new unordered_map if available, or hash_map otherwise. Since
unordered_map is the future direction, I'm changing our code to use that
directly. The backward-compatible version is a #define to hash_map,
which has a compatible interface.
While I'm at it, let's also define unordered_multimap, unordered_set,
and unordered_multiset.
* unordered.h: New.
* dwflpp.h (stap_map): Removed.
(cache typedefs): Use the unordered name now.
Diffstat (limited to 'dwflpp.h')
-rw-r--r-- | dwflpp.h | 25 |
1 files changed, 5 insertions, 20 deletions
@@ -15,6 +15,7 @@ #include "dwarf_wrappers.h" #include "elaborate.h" #include "session.h" +#include "unordered.h" #include <cstring> #include <iostream> @@ -43,33 +44,17 @@ struct dwarf_query; enum line_t { ABSOLUTE, RELATIVE, RANGE, WILDCARD }; enum info_status { info_unknown, info_present, info_absent }; -#ifdef HAVE_TR1_UNORDERED_MAP -#include <tr1/unordered_map> -template<class K, class V> struct stap_map { - typedef std::tr1::unordered_map<K, V> type; -}; -#else -#include <ext/hash_map> -template<class K, class V> struct stap_map { - typedef __gnu_cxx::hash_map<K, V, stap_map> type; - size_t operator() (std::string const& s) const - { __gnu_cxx::hash<const char*> h; return h(s.c_str()); } - size_t operator() (void* const& p) const - { __gnu_cxx::hash<long> h; return h(reinterpret_cast<long>(p)); } -}; -#endif - // module -> cu die[] -typedef stap_map<Dwarf*, std::vector<Dwarf_Die>*>::type module_cu_cache_t; +typedef unordered_map<Dwarf*, std::vector<Dwarf_Die>*> module_cu_cache_t; // function -> die -typedef stap_map<std::string, Dwarf_Die>::type cu_function_cache_t; +typedef unordered_map<std::string, Dwarf_Die> cu_function_cache_t; // cu die -> (function -> die) -typedef stap_map<void*, cu_function_cache_t*>::type mod_cu_function_cache_t; +typedef unordered_map<void*, cu_function_cache_t*> mod_cu_function_cache_t; // inline function die -> instance die[] -typedef stap_map<void*, std::vector<Dwarf_Die>*>::type cu_inl_function_cache_t; +typedef unordered_map<void*, std::vector<Dwarf_Die>*> cu_inl_function_cache_t; typedef std::vector<func_info> func_info_map_t; typedef std::vector<inline_instance_info> inline_instance_map_t; |