38#include <unordered_map>
51template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>,
52 typename PairT = std::pair<PtrT, PtrT>>
58template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>,
59 typename PairT = std::pair<PtrT, PtrT>>
65template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>,
66 typename PairT = std::pair<PtrT, PtrT>>
72template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>>
85using hash_map_t = std::unordered_map<hash_value_t, std::string>;
145 return std::hash<string_view_t>{}(std::forward<Tp>(
_prefix));
150template <
typename Tp,
151 std::enable_if_t<!concepts::is_string_type<std::decay_t<Tp>>::value,
int>>
155 return std::hash<std::decay_t<Tp>>{}(std::forward<Tp>(
_prefix));
163 return (_lhs ^= _rhs + 0x9e3779b9 + (_lhs << 6) + (_lhs >> 2));
168template <
typename Tp, std::enable_if_t<!std::is_
integral<std::decay_t<Tp>>::value,
int>>
193 if(_hash_map && _hash_map->find(
_hash_id) == _hash_map->end())
255 auto itr = _hash_ids->find(_hash);
256 if(itr != _hash_ids->end())
265 auto itr = _hash_ids->find(_hash);
266 if(itr != _hash_ids->end())
267 return (_v = &itr->second,
true);
275 auto itr = _hash_ids->find(_hash);
276 if(itr != _hash_ids->end())
277 return (_v = itr->second.c_str(),
true);
283typename hash_map_t::const_iterator
287typename hash_map_t::const_iterator
313template <
typename FuncT>
320 _resolvers->emplace_back(std::forward<FuncT>(_func));
321 return _resolvers->size();
335template <
typename... Args>
Include the macros for hash.
const hash_alias_ptr_t hash_value_t hash_value_t _alias_hash_id
std::shared_ptr< hash_resolver_vec_t > & get_hash_resolvers()
hash_value_t add_hash_id(hash_map_ptr_t &_hash_map, string_view_cref_t _prefix)
add an string to the given hash-map (if it doesn't already exist) and return the hash
std::shared_ptr< hash_alias_map_t > hash_alias_ptr_t
hash_alias_ptr_t & get_hash_aliases()
bool get_hash_identifier(const hash_map_ptr_t &_hash_map, const hash_alias_ptr_t &_hash_alias, hash_value_t _hash_id, std::string *&_ret)
auto get_demangled_hash_identifier(Args &&... _args)
std::shared_ptr< hash_map_t > hash_map_ptr_t
size_t add_hash_resolver(FuncT &&_func)
const hash_alias_ptr_t hash_value_t std::string *& _ret
const hash_alias_ptr_t & _hash_alias
string_view_t get_hash_identifier_fast(hash_value_t _hash)
this does not check other threads or aliases. Only call this function when you know that the hash exi...
std::unordered_map< hash_value_t, hash_value_t > hash_alias_map_t
hash_map_t::const_iterator find_hash_identifier(const hash_map_ptr_t &_hash_map, const hash_alias_ptr_t &_hash_alias, hash_value_t _hash_id)
std::unordered_map< hash_value_t, std::string > hash_map_t
hash_map_ptr_t & get_hash_ids()
hash_value_t get_hash_id(Tp &&_prefix)
hash_identifier_error(_hash_map, _hash_alias, _hash_id)
std::pair< hash_map_ptr_t, hash_map_ptr_t > hash_map_ptr_pair_t
hash_value_t get_combined_hash_id(hash_value_t _lhs, hash_value_t _rhs)
std::string demangle_hash_identifier(std::string, char bdelim='[', char edelim=']')
std::vector< hash_resolver_t > hash_resolver_vec_t
std::function< bool(hash_value_t, std::string &)> hash_resolver_t
std::array< char *, 4 > _args
char const std::string & _prefix
std::string string_view_t
const std::string & string_view_cref_t
PtrT get_shared_ptr_pair_main_instance()
typename std::decay< T >::type decay_t
Alias template for decay.
typename std::enable_if< B, T >::type enable_if_t
Alias template for enable_if.
PtrT get_shared_ptr_pair_instance()
tim::mpl::apply< std::string > string
PairT & get_shared_ptr_pair()
PtrT get_shared_ptr_lone_instance()
typename typename typename