8#include <unordered_map>
61 template <
class T,
class Factory>
62 std::unique_ptr<T>
acquire(Factory&& make) {
63 static_assert(std::is_base_of_v<View, T>,
64 "ViewPool::acquire<T>: T must derive from pulp::view::View");
65 if (
auto recycled = take(std::type_index(
typeid(T)))) {
66 recycled->prepare_for_reuse();
67 return std::unique_ptr<T>(
static_cast<T*
>(recycled.release()));
69 return std::forward<Factory>(make)();
76 std::unique_ptr<View>
acquire(std::type_index key);
92 void clear() { free_lists_.clear(); }
95 std::size_t
size(std::type_index key)
const {
96 auto it = free_lists_.find(key);
97 return it == free_lists_.end() ? 0 : it->second.size();
103 for (
const auto& [key, list] : free_lists_)
n += list.size();
110 std::unique_ptr<View> take(std::type_index key);
113 std::unordered_map<std::type_index, std::vector<std::unique_ptr<View>>> free_lists_;
std::size_t total_size() const
Total pooled instances across all classes (introspection / tests).
Definition view_pool.hpp:101
std::unique_ptr< View > acquire(std::type_index key)
Type-erased acquire for callers that do not know the concrete row/cell type at compile time (VirtualL...
ViewPool(const ViewPool &)=delete
static constexpr std::size_t kDefaultPerClassCap
Default per-class free-list cap.
Definition view_pool.hpp:44
void set_per_class_cap(std::size_t cap)
Set the maximum number of pooled instances per class.
Definition view_pool.hpp:88
std::size_t per_class_cap() const
Definition view_pool.hpp:89
ViewPool & operator=(const ViewPool &)=delete
std::size_t size(std::type_index key) const
Number of pooled instances of a given class (introspection / tests).
Definition view_pool.hpp:95
ViewPool(std::size_t per_class_cap)
Definition view_pool.hpp:47
void release(std::unique_ptr< View > view)
Return a view to the pool.
std::unique_ptr< T > acquire(Factory &&make)
Acquire a T.
Definition view_pool.hpp:62
void clear()
Drop every pooled instance across all classes.
Definition view_pool.hpp:92
Hover-cursor tracking for platform window hosts.
Definition fwd.hpp:27
@ n
Definition input_events.hpp:40