#ifndef SANITIZER_ADDRHASHMAP_H
#define SANITIZER_ADDRHASHMAP_H
#include "sanitizer_common.h"
#include "sanitizer_mutex.h"
#include "sanitizer_atomic.h"
#include "sanitizer_allocator_internal.h"
namespace __sanitizer {
template<typename T, uptr kSize>
class AddrHashMap { … };
template <typename T, uptr kSize>
void AddrHashMap<T, kSize>::ForEach(ForEachCallback cb, void *arg) { … }
template<typename T, uptr kSize>
AddrHashMap<T, kSize>::Handle::Handle(AddrHashMap<T, kSize> *map, uptr addr) { … }
template<typename T, uptr kSize>
AddrHashMap<T, kSize>::Handle::Handle(AddrHashMap<T, kSize> *map, uptr addr,
bool remove) { … }
template<typename T, uptr kSize>
AddrHashMap<T, kSize>::Handle::Handle(AddrHashMap<T, kSize> *map, uptr addr,
bool remove, bool create) { … }
template<typename T, uptr kSize>
AddrHashMap<T, kSize>::Handle::~Handle() { … }
template <typename T, uptr kSize>
T *AddrHashMap<T, kSize>::Handle::operator->() { … }
template <typename T, uptr kSize>
const T &AddrHashMap<T, kSize>::Handle::operator*() const { … }
template <typename T, uptr kSize>
T &AddrHashMap<T, kSize>::Handle::operator*() { … }
template<typename T, uptr kSize>
bool AddrHashMap<T, kSize>::Handle::created() const { … }
template<typename T, uptr kSize>
bool AddrHashMap<T, kSize>::Handle::exists() const { … }
template<typename T, uptr kSize>
AddrHashMap<T, kSize>::AddrHashMap() { … }
template <typename T, uptr kSize>
void AddrHashMap<T, kSize>::acquire(Handle *h)
SANITIZER_NO_THREAD_SAFETY_ANALYSIS { … }
template <typename T, uptr kSize>
void AddrHashMap<T, kSize>::release(Handle *h)
SANITIZER_NO_THREAD_SAFETY_ANALYSIS { … }
template<typename T, uptr kSize>
uptr AddrHashMap<T, kSize>::calcHash(uptr addr) { … }
}
#endif