#ifdef UNSAFE_BUFFERS_BUILD
#pragma allow_unsafe_buffers
#endif
#ifndef BASE_TRACE_EVENT_MEMORY_USAGE_ESTIMATOR_H_
#define BASE_TRACE_EVENT_MEMORY_USAGE_ESTIMATOR_H_
#include <stdint.h>
#include <array>
#include <concepts>
#include <deque>
#include <list>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <type_traits>
#include <unordered_map>
#include <unordered_set>
#include <vector>
#include "base/base_export.h"
#include "base/containers/circular_deque.h"
#include "base/containers/flat_map.h"
#include "base/containers/flat_set.h"
#include "base/containers/heap_array.h"
#include "base/containers/linked_list.h"
#include "base/containers/lru_cache.h"
#include "base/containers/queue.h"
#include "base/containers/span.h"
#include "base/memory/raw_ptr.h"
#include "base/stl_util.h"
#include "base/types/always_false.h"
namespace base {
namespace trace_event {
template <class T>
auto EstimateMemoryUsage(const T& object)
-> decltype(object …);
template <class C, class T, class A>
size_t EstimateMemoryUsage(const std::basic_string<C, T, A>& string);
template <class T, size_t N>
size_t EstimateMemoryUsage(const std::array<T, N>& array);
template <class T, size_t N>
size_t EstimateMemoryUsage(T (&array)[N]);
template <class T>
size_t EstimateMemoryUsage(const base::HeapArray<T>& array);
template <class T>
size_t EstimateMemoryUsage(base::span<T> array);
template <class T, class D>
size_t EstimateMemoryUsage(const std::unique_ptr<T, D>& ptr);
template <class T>
size_t EstimateMemoryUsage(const std::shared_ptr<T>& ptr);
template <class F, class S>
size_t EstimateMemoryUsage(const std::pair<F, S>& pair);
template <class T, class A>
size_t EstimateMemoryUsage(const std::vector<T, A>& vector);
template <class T, class A>
size_t EstimateMemoryUsage(const std::list<T, A>& list);
template <class T>
size_t EstimateMemoryUsage(const base::LinkedList<T>& list);
template <class T, class C, class A>
size_t EstimateMemoryUsage(const std::set<T, C, A>& set);
template <class T, class C, class A>
size_t EstimateMemoryUsage(const std::multiset<T, C, A>& set);
template <class K, class V, class C, class A>
size_t EstimateMemoryUsage(const std::map<K, V, C, A>& map);
template <class K, class V, class C, class A>
size_t EstimateMemoryUsage(const std::multimap<K, V, C, A>& map);
template <class T, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_set<T, H, KE, A>& set);
template <class T, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_multiset<T, H, KE, A>& set);
template <class K, class V, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_map<K, V, H, KE, A>& map);
template <class K, class V, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_multimap<K, V, H, KE, A>& map);
template <class T, class A>
size_t EstimateMemoryUsage(const std::deque<T, A>& deque);
template <class T, class C>
size_t EstimateMemoryUsage(const std::queue<T, C>& queue);
template <class T, class C>
size_t EstimateMemoryUsage(const std::priority_queue<T, C>& queue);
template <class T, class C>
size_t EstimateMemoryUsage(const std::stack<T, C>& stack);
template <class T>
size_t EstimateMemoryUsage(const base::circular_deque<T>& deque);
template <class T, class C>
size_t EstimateMemoryUsage(const base::flat_set<T, C>& set);
template <class K, class V, class C>
size_t EstimateMemoryUsage(const base::flat_map<K, V, C>& map);
template <class K, class V, class C>
size_t EstimateMemoryUsage(const base::LRUCache<K, V, C>& lru);
template <class K, class V, class C>
size_t EstimateMemoryUsage(const base::HashingLRUCache<K, V, C>& lru);
template <class V, class C>
size_t EstimateMemoryUsage(const base::LRUCacheSet<V, C>& lru);
template <class V, class C>
size_t EstimateMemoryUsage(const base::HashingLRUCacheSet<V, C>& lru);
namespace internal {
HasEMU;
IteratorValueType;
IsIteratorOfInstantiatedContainer;
IsIteratorOfContainer;
array_test_helper;
IsIteratorOfStandardContainer;
IsKnownNonAllocatingType;
}
template <class T>
size_t EstimateItemMemoryUsage(const T& value) { … }
template <class I>
size_t EstimateIterableMemoryUsage(const I& iterable) { … }
template <class T>
auto EstimateMemoryUsage(const T& object)
-> decltype(object.EstimateMemoryUsage()) { … }
template <class C, class T, class A>
size_t EstimateMemoryUsage(const std::basic_string<C, T, A>& string) { … }
extern template BASE_EXPORT size_t EstimateMemoryUsage(const std::string&);
extern template BASE_EXPORT size_t EstimateMemoryUsage(const std::u16string&);
template <class T, size_t N>
size_t EstimateMemoryUsage(const std::array<T, N>& array) { … }
template <class T, size_t N>
size_t EstimateMemoryUsage(T (&array)[N]) { … }
template <class T>
size_t EstimateMemoryUsage(const base::HeapArray<T>& array) { … }
template <class T>
size_t EstimateMemoryUsage(base::span<T> array) { … }
template <class T, class D>
size_t EstimateMemoryUsage(const std::unique_ptr<T, D>& ptr) { … }
template <class T>
size_t EstimateMemoryUsage(const std::shared_ptr<T>& ptr) { … }
template <class F, class S>
size_t EstimateMemoryUsage(const std::pair<F, S>& pair) { … }
template <class T, class A>
size_t EstimateMemoryUsage(const std::vector<T, A>& vector) { … }
template <class T, class A>
size_t EstimateMemoryUsage(const std::list<T, A>& list) { … }
template <class T>
size_t EstimateMemoryUsage(const base::LinkedList<T>& list) { … }
template <class V>
size_t EstimateTreeMemoryUsage(size_t size) { … }
template <class T, class C, class A>
size_t EstimateMemoryUsage(const std::set<T, C, A>& set) { … }
template <class T, class C, class A>
size_t EstimateMemoryUsage(const std::multiset<T, C, A>& set) { … }
template <class K, class V, class C, class A>
size_t EstimateMemoryUsage(const std::map<K, V, C, A>& map) { … }
template <class K, class V, class C, class A>
size_t EstimateMemoryUsage(const std::multimap<K, V, C, A>& map) { … }
namespace internal {
template <class V>
size_t HashMapBucketCountForTesting(size_t bucket_count) { … }
template <class LruCacheType>
size_t DoEstimateMemoryUsageForLruCache(const LruCacheType& lru_cache) { … }
}
template <class V>
size_t EstimateHashMapMemoryUsage(size_t bucket_count, size_t size) { … }
template <class K, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_set<K, H, KE, A>& set) { … }
template <class K, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_multiset<K, H, KE, A>& set) { … }
template <class K, class V, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_map<K, V, H, KE, A>& map) { … }
template <class K, class V, class H, class KE, class A>
size_t EstimateMemoryUsage(const std::unordered_multimap<K, V, H, KE, A>& map) { … }
template <class T, class A>
size_t EstimateMemoryUsage(const std::deque<T, A>& deque) { … }
template <class T, class C>
size_t EstimateMemoryUsage(const std::queue<T, C>& queue) { … }
template <class T, class C>
size_t EstimateMemoryUsage(const std::priority_queue<T, C>& queue) { … }
template <class T, class C>
size_t EstimateMemoryUsage(const std::stack<T, C>& stack) { … }
template <class T>
size_t EstimateMemoryUsage(const base::circular_deque<T>& deque) { … }
template <class T, class C>
size_t EstimateMemoryUsage(const base::flat_set<T, C>& set) { … }
template <class K, class V, class C>
size_t EstimateMemoryUsage(const base::flat_map<K, V, C>& map) { … }
template <class K, class V, class C>
size_t EstimateMemoryUsage(const LRUCache<K, V, C>& lru_cache) { … }
template <class K, class V, class C>
size_t EstimateMemoryUsage(const HashingLRUCache<K, V, C>& lru_cache) { … }
template <class V, class C>
size_t EstimateMemoryUsage(const LRUCacheSet<V, C>& lru_cache) { … }
template <class V, class C>
size_t EstimateMemoryUsage(const HashingLRUCacheSet<V, C>& lru_cache) { … }
}
}
#endif