18 #include <hicn/transport/utils/branch_prediction.h>
19 #include <hicn/transport/utils/spinlock.h>
33 void operator()(T *t) {
46 using Ptr = std::shared_ptr<T>;
55 for (
auto &ptr : object_pool_) {
62 return object_pool_.empty();
65 std::pair<bool, Ptr> get() {
67 if (object_pool_.empty()) {
68 return std::make_pair<bool, Ptr>(
false,
nullptr);
71 auto ret = std::move(object_pool_.front());
72 object_pool_.pop_front();
73 return std::make_pair<bool, Ptr>(
true, std::move(ret));
79 if (TRANSPORT_EXPECT_TRUE(!destructor_)) {
80 object_pool_.emplace_front(makePtr(
object));
86 Ptr makePtr(T *
object) {
return Ptr(
object, ObjectDeleter(
this)); }
90 std::deque<Ptr> object_pool_;
91 std::atomic<bool> destructor_;