36template <
class ObjectType,
size_t N = kPoolDefaultSize,
37 class Initializer = ObjectPoolDefaultInitializer<ObjectType>,
45 const std::string& sensor_name =
"velodyne64") {
46 typedef std::shared_ptr<LightObjectPool> LightObjectPoolPtr;
47 static std::map<std::string, LightObjectPoolPtr> object_pool;
48 auto itr = object_pool.find(sensor_name);
49 if (itr == object_pool.end()) {
50 auto ret = object_pool.insert(std::pair<std::string, LightObjectPoolPtr>(
52 return *(ret.first->second);
54 return *(itr->second);
58 std::shared_ptr<ObjectType>
Get()
override {
61 Add(1 + kPoolDefaultExtendNum);
66 return std::shared_ptr<ObjectType>(
74 std::vector<std::shared_ptr<ObjectType>>* data)
override {
76 Add(num -
queue_.size() + kPoolDefaultExtendNum);
79 for (
size_t i = 0; i < num; ++i) {
83 data->emplace_back(std::shared_ptr<ObjectType>(
93 std::list<std::shared_ptr<ObjectType>>* data)
override {
94 std::vector<ObjectType*> buffer(num,
nullptr);
96 Add(num -
queue_.size() + kPoolDefaultExtendNum);
98 for (
size_t i = 0; i < num; ++i) {
99 buffer[i] =
queue_.front();
102 for (
size_t i = 0; i < num; ++i) {
105 ? data->emplace_front(std::shared_ptr<ObjectType>(
107 : data->emplace_back(std::shared_ptr<ObjectType>(
117 std::deque<std::shared_ptr<ObjectType>>* data)
override {
118 std::vector<ObjectType*> buffer(num,
nullptr);
119 if (
queue_.size() < num) {
120 Add(num -
queue_.size() + kPoolDefaultExtendNum);
122 for (
size_t i = 0; i < num; ++i) {
123 buffer[i] =
queue_.front();
126 for (
size_t i = 0; i < num; ++i) {
129 ? data->emplace_front(std::shared_ptr<ObjectType>(
131 : data->emplace_back(std::shared_ptr<ObjectType>(
160 for (
size_t i = 0; i < num; ++i) {
void set_capacity(size_t capacity) override
void BatchGet(size_t num, bool is_front, std::deque< std::shared_ptr< ObjectType > > *data) override
void BatchGet(size_t num, bool is_front, std::list< std::shared_ptr< ObjectType > > *data) override
size_t RemainedNum() override
~LightObjectPool() override
void BatchGet(size_t num, std::vector< std::shared_ptr< ObjectType > > *data) override
std::list< ObjectType * > extended_cache_
static LightObjectPool & Instance(const std::string &sensor_name="velodyne64")
std::queue< ObjectType * > queue_
std::shared_ptr< ObjectType > Get() override
LightObjectPool(const size_t default_size)
const size_t kDefaultCacheSize
SensorType
Sensor types are set in the order of lidar, radar, camera, ultrasonic Please make sure SensorType has...