36 #include <type_traits>
37 #include <unordered_map>
50 template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>,
51 typename PairT = std::pair<PtrT, PtrT>>
57 template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>,
58 typename PairT = std::pair<PtrT, PtrT>>
64 template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>,
65 typename PairT = std::pair<PtrT, PtrT>>
71 template <
typename Tp,
typename Tag = TIMEMORY_API,
typename PtrT = std::shared_ptr<Tp>>
82 using hash_map_t = std::unordered_map<hash_value_t, std::string>;
142 return std::hash<string_view_t>{}(std::forward<Tp>(
_prefix));
147 template <
typename Tp,
148 std::enable_if_t<!concepts::is_string_type<std::decay_t<Tp>>::value,
int>>
152 return std::hash<std::decay_t<Tp>>{}(std::forward<Tp>(
_prefix));
160 return (_lhs ^= _rhs + 0x9e3779b9 + (_lhs << 6) + (_lhs >> 2));
165 template <
typename Tp, std::enable_if_t<!std::is_
integral<std::decay_t<Tp>>::value,
int>>
190 if(_hash_map && _hash_map->find(
_hash_id) == _hash_map->end())
240 auto itr = _hash_ids->find(_hash);
241 if(itr != _hash_ids->end())
259 template <
typename FuncT>
266 _resolvers->emplace_back(std::forward<FuncT>(_func));
267 return _resolvers->size();
281 template <
typename... Args>
Include the macros for hash.
std::vector< hash_resolver_t > hash_resolver_vec_t
const hash_alias_ptr_t & _hash_alias
char const std::string & _prefix
std::string string_view_t
std::shared_ptr< hash_map_t > hash_map_ptr_t
auto get_demangled_hash_identifier(Args &&... _args)
std::string get_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, hash_value_t > hash_alias_map_t
hash_alias_ptr_t & get_hash_aliases()
hash_value_t get_hash_id(Tp &&_prefix)
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.
std::shared_ptr< hash_alias_map_t > hash_alias_ptr_t
size_t add_hash_resolver(FuncT &&_func)
PtrT get_shared_ptr_pair_instance()
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...
hash_map_ptr_t & get_hash_ids()
std::string demangle_hash_identifier(std::string, char bdelim='[', char edelim=']')
hash_value_t get_combined_hash_id(hash_value_t _lhs, hash_value_t _rhs)
tim::mpl::apply< std::string > string
hash_value_t add_hash_id(hash_map_ptr_t &_hash_map, const string_view_t &_prefix)
add an string to the given hash-map (if it doesn't already exist) and return the hash
std::pair< hash_map_ptr_t, hash_map_ptr_t > hash_map_ptr_pair_t
PairT & get_shared_ptr_pair()
std::shared_ptr< hash_resolver_vec_t > & get_hash_resolvers()
std::unordered_map< hash_value_t, std::string > hash_map_t
std::function< bool(hash_value_t, std::string &)> hash_resolver_t
PtrT get_shared_ptr_lone_instance()
typename typename typename