31 namespace perception {
36 template <
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>(
154 extended_cache_.clear();
160 for (
size_t i = 0; i < num; ++i) {
void BatchGet(size_t num, bool is_front, std::list< std::shared_ptr< ObjectType >> *data) override
Definition: light_object_pool.h:92
Definition: light_object_pool.h:39
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
ObjectType * cache_
Definition: light_object_pool.h:180
void set_capacity(size_t capacity) override
Definition: light_object_pool.h:137
const size_t kDefaultCacheSize
Definition: light_object_pool.h:181
Initializer kInitializer
Definition: light_object_pool.h:185
LightObjectPool(const size_t default_size)
Definition: light_object_pool.h:169
static LightObjectPool & Instance(const std::string &sensor_name="velodyne64")
Definition: light_object_pool.h:44
size_t capacity_
Definition: object_pool.h:66
void Add(size_t num)
Definition: light_object_pool.h:159
void BatchGet(size_t num, bool is_front, std::deque< std::shared_ptr< ObjectType >> *data) override
Definition: light_object_pool.h:116
Definition: object_pool.h:28
std::shared_ptr< ObjectType > Get() override
Definition: light_object_pool.h:58
~LightObjectPool() override
Definition: light_object_pool.h:146
SensorType
Sensor types are set in the order of lidar, radar, camera, ultrasonic Please make sure SensorType has...
Definition: sensor_meta.h:29
ObjectType
Definition: object_types.h:26
void BatchGet(size_t num, std::vector< std::shared_ptr< ObjectType >> *data) override
Definition: light_object_pool.h:73
std::list< ObjectType * > extended_cache_
Definition: light_object_pool.h:183
size_t RemainedNum() override
Definition: light_object_pool.h:144
std::queue< ObjectType * > queue_
Definition: light_object_pool.h:178