Pixie
Loading...
Searching...
No Matches
memory_usage.h
1#pragma once
2
3#include <concepts>
4#include <cstddef>
5#include <optional>
6#include <vector>
7
8namespace pixie {
9
17template <class T, class Allocator>
18std::size_t vector_capacity_bytes(const std::vector<T, Allocator>& values) {
19 return values.capacity() * sizeof(T);
20}
21
25template <class T>
26concept HasMemoryUsageBytes = requires(const T& value) {
27 { value.memory_usage_bytes() } -> std::convertible_to<std::size_t>;
28};
29
37template <HasMemoryUsageBytes T>
38std::size_t nested_owned_memory_bytes(const T& value) {
39 const std::size_t total = value.memory_usage_bytes();
40 return total > sizeof(T) ? total - sizeof(T) : 0;
41}
42
46template <HasMemoryUsageBytes T>
47std::size_t optional_nested_owned_memory_bytes(const std::optional<T>& value) {
48 return value.has_value() ? nested_owned_memory_bytes(*value) : 0;
49}
50
51} // namespace pixie
Concept for types that expose total owned memory usage in bytes.
Definition memory_usage.h:26