15 #ifndef SHAKA_EMBEDDED_MEMORY_HEAP_TRACER_H_ 16 #define SHAKA_EMBEDDED_MEMORY_HEAP_TRACER_H_ 18 #include <glog/logging.h> 22 #include <type_traits> 23 #include <unordered_map> 24 #include <unordered_set> 91 const std::unordered_set<const Traceable*>&
alive()
const {
108 template <
typename T>
109 void Trace(
const std::vector<T>* array) {
110 for (
const T& item : *array) {
114 template <
typename T>
115 void Trace(
const std::list<T>* array) {
116 for (
const T& item : *array) {
120 template <
typename Key,
typename Value>
121 void Trace(
const std::unordered_map<Key, Value>* map) {
122 for (
const auto& pair : *map) {
127 template <
typename T>
132 template <
typename... Types>
134 VariantHelper<0, Types...>::Trace(
this, variant);
142 template <
typename T,
144 std::is_enum<T>::value>>
154 void TraceAll(
const std::unordered_set<const Traceable*>& ref_alive);
160 template <
size_t I,
typename... Types>
161 struct VariantHelper {
163 if (variant->
index() == I)
164 tracer->
Trace(&get<I>(*variant));
166 VariantHelper<I + 1, Types...>::Trace(tracer, variant);
169 template <
typename... Types>
170 struct VariantHelper<sizeof...(Types), Types...> {
172 CHECK_EQ(variant->
index(),
sizeof...(Types) - 1);
173 tracer->
Trace(&
get<
sizeof...(Types) - 1>(*variant));
178 std::unordered_set<const Traceable*> alive_;
179 std::unordered_set<const Traceable*> pending_;
185 #endif // SHAKA_EMBEDDED_MEMORY_HEAP_TRACER_H_ void Trace(const optional< T > *opt)
void Trace(const std::string *)
void Trace(const std::vector< T > *array)
void Trace(const std::unordered_map< Key, Value > *map)
const std::unordered_set< const Traceable * > & alive() const
const T & value() const &
static constexpr const uint64_t kShortLiveDurationMs
typename std::enable_if< B, T >::type enable_if_t
void Trace(const Traceable *ptr)
void Trace(const variant< Types... > *variant)
void Trace(const std::list< T > *array)
virtual bool IsRootedAlive() const
virtual void Trace(HeapTracer *tracer) const =0
virtual bool IsShortLived() const