Apollo 10.0
自动驾驶开放平台
apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer > 模板类 参考

#include <concurrent_object_pool.h>

类 apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer > 继承关系图:
apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer > 的协作图:

Public 成员函数

std::shared_ptr< ObjectTypeGet () override
 
void BatchGet (size_t num, std::vector< std::shared_ptr< ObjectType > > *data) override
 
void BatchGet (size_t num, bool is_front, std::list< std::shared_ptr< ObjectType > > *data) override
 
void BatchGet (size_t num, bool is_front, std::deque< std::shared_ptr< ObjectType > > *data) override
 
 ~ConcurrentObjectPool () override
 
- Public 成员函数 继承自 apollo::perception::base::BaseObjectPool< ObjectType >
 BaseObjectPool ()=default
 
virtual ~BaseObjectPool ()=default
 
virtual void set_capacity (size_t capacity)
 
size_t get_capacity ()
 
virtual size_t RemainedNum ()
 

静态 Public 成员函数

static ConcurrentObjectPoolInstance ()
 

Protected 成员函数

 ConcurrentObjectPool (const size_t default_size)
 
- Protected 成员函数 继承自 apollo::perception::base::BaseObjectPool< ObjectType >
 BaseObjectPool (const BaseObjectPool &rhs)=delete
 
BaseObjectPooloperator= (const BaseObjectPool &rhs)=delete
 

Protected 属性

std::mutex mutex_
 
std::queue< ObjectType * > queue_
 
ObjectTypecache_ = nullptr
 
const size_t kDefaultCacheSize
 
std::list< ObjectType * > extended_cache_
 
- Protected 属性 继承自 apollo::perception::base::BaseObjectPool< ObjectType >
size_t capacity_ = 0
 

静态 Protected 属性

static const Initializer kInitializer
 

详细描述

template<class ObjectType, size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
class apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >

在文件 concurrent_object_pool.h43 行定义.

构造及析构函数说明

◆ ~ConcurrentObjectPool()

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::~ConcurrentObjectPool ( )
inlineoverride

在文件 concurrent_object_pool.h201 行定义.

201 {
202 if (cache_) {
203 delete[] cache_;
204 cache_ = nullptr;
205 }
206 for (auto& ptr : extended_cache_) {
207 delete ptr;
208 }
209 extended_cache_.clear();
210 }

◆ ConcurrentObjectPool()

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::ConcurrentObjectPool ( const size_t  default_size)
inlineexplicitprotected

在文件 concurrent_object_pool.h225 行定义.

226 : kDefaultCacheSize(default_size) {
227#ifndef PERCEPTION_BASE_DISABLE_POOL
229 for (size_t i = 0; i < kDefaultCacheSize; ++i) {
230 queue_.push(&cache_[i]);
231 }
233#endif
234 }

成员函数说明

◆ BatchGet() [1/3]

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
void apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::BatchGet ( size_t  num,
bool  is_front,
std::deque< std::shared_ptr< ObjectType > > *  data 
)
inlineoverridevirtual

实现了 apollo::perception::base::BaseObjectPool< ObjectType >.

在文件 concurrent_object_pool.h154 行定义.

155 {
156#ifndef PERCEPTION_BASE_DISABLE_POOL
157 std::vector<ObjectType*> buffer(num, nullptr);
158 {
159 std::lock_guard<std::mutex> lock(mutex_);
160 if (queue_.size() < num) {
161 Add(num - queue_.size() + kPoolDefaultExtendNum);
162 }
163 for (size_t i = 0; i < num; ++i) {
164 buffer[i] = queue_.front();
165 queue_.pop();
166 }
167 }
168 for (size_t i = 0; i < num; ++i) {
169 kInitializer(buffer[i]);
170 is_front ? data->emplace_front(std::shared_ptr<ObjectType>(
171 buffer[i],
172 [&](ObjectType* obj_ptr) {
173 std::lock_guard<std::mutex> lock(mutex_);
174 queue_.push(obj_ptr);
175 }))
176 : data->emplace_back(std::shared_ptr<ObjectType>(
177 buffer[i], [&](ObjectType* obj_ptr) {
178 std::lock_guard<std::mutex> lock(mutex_);
179 queue_.push(obj_ptr);
180 }));
181 }
182#else
183 for (size_t i = 0; i < num; ++i) {
184 is_front ? data->emplace_front(new ObjectType)
185 : data->emplace_back(new ObjectType);
186 }
187#endif
188 }

◆ BatchGet() [2/3]

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
void apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::BatchGet ( size_t  num,
bool  is_front,
std::list< std::shared_ptr< ObjectType > > *  data 
)
inlineoverridevirtual

实现了 apollo::perception::base::BaseObjectPool< ObjectType >.

在文件 concurrent_object_pool.h113 行定义.

114 {
115#ifndef PERCEPTION_BASE_DISABLE_POOL
116 std::vector<ObjectType*> buffer(num, nullptr);
117 {
118 std::lock_guard<std::mutex> lock(mutex_);
119 if (queue_.size() < num) {
120 Add(num - queue_.size() + kPoolDefaultExtendNum);
121 }
122 for (size_t i = 0; i < num; ++i) {
123 buffer[i] = queue_.front();
124 queue_.pop();
125 }
126 }
127 // For efficiency consideration, initialization should be invoked
128 // after releasing the mutex
129 for (size_t i = 0; i < num; ++i) {
130 kInitializer(buffer[i]);
131 is_front ? data->emplace_front(std::shared_ptr<ObjectType>(
132 buffer[i],
133 [&](ObjectType* obj_ptr) {
134 std::lock_guard<std::mutex> lock(mutex_);
135 queue_.push(obj_ptr);
136 }))
137 : data->emplace_back(std::shared_ptr<ObjectType>(
138 buffer[i], [&](ObjectType* obj_ptr) {
139 std::lock_guard<std::mutex> lock(mutex_);
140 queue_.push(obj_ptr);
141 }));
142 }
143#else
144 for (size_t i = 0; i < num; ++i) {
145 is_front ? data->emplace_front(new ObjectType)
146 : data->emplace_back(new ObjectType);
147 }
148#endif
149 }

◆ BatchGet() [3/3]

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
void apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::BatchGet ( size_t  num,
std::vector< std::shared_ptr< ObjectType > > *  data 
)
inlineoverridevirtual

实现了 apollo::perception::base::BaseObjectPool< ObjectType >.

在文件 concurrent_object_pool.h79 行定义.

80 {
81#ifndef PERCEPTION_BASE_DISABLE_POOL
82 std::vector<ObjectType*> buffer(num, nullptr);
83 {
84 std::lock_guard<std::mutex> lock(mutex_);
85 if (queue_.size() < num) {
86 Add(num - queue_.size() + kPoolDefaultExtendNum);
87 }
88 for (size_t i = 0; i < num; ++i) {
89 buffer[i] = queue_.front();
90 queue_.pop();
91 }
92 }
93 // For efficiency consideration, initialization should be invoked
94 // after releasing the mutex
95 for (size_t i = 0; i < num; ++i) {
96 kInitializer(buffer[i]);
97 data->emplace_back(
98 std::shared_ptr<ObjectType>(buffer[i], [&](ObjectType* obj_ptr) {
99 std::lock_guard<std::mutex> lock(mutex_);
100 queue_.push(obj_ptr);
101 }));
102 }
103#else
104 for (size_t i = 0; i < num; ++i) {
105 data->emplace_back(new ObjectType);
106 }
107#endif
108 }

◆ Get()

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
std::shared_ptr< ObjectType > apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::Get ( )
inlineoverridevirtual

实现了 apollo::perception::base::BaseObjectPool< ObjectType >.

在文件 concurrent_object_pool.h53 行定义.

53 {
54// TODO(All): remove conditional build
55#ifndef PERCEPTION_BASE_DISABLE_POOL
56 ObjectType* ptr = nullptr;
57 {
58 std::lock_guard<std::mutex> lock(mutex_);
59 if (queue_.empty()) {
60 Add(1 + kPoolDefaultExtendNum);
61 }
62 ptr = queue_.front();
63 queue_.pop();
64 }
65 // For efficiency consideration, initialization should be invoked
66 // after releasing the mutex
67 kInitializer(ptr);
68 return std::shared_ptr<ObjectType>(ptr, [&](ObjectType* obj_ptr) {
69 std::lock_guard<std::mutex> lock(mutex_);
70 queue_.push(obj_ptr);
71 });
72#else
73 return std::shared_ptr<ObjectType>(new ObjectType);
74#endif
75 }

◆ Instance()

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
static ConcurrentObjectPool & apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::Instance ( )
inlinestatic

在文件 concurrent_object_pool.h48 行定义.

48 {
49 static ConcurrentObjectPool pool(N);
50 return pool;
51 }

类成员变量说明

◆ cache_

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
ObjectType* apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::cache_ = nullptr
protected

在文件 concurrent_object_pool.h238 行定义.

◆ extended_cache_

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
std::list<ObjectType*> apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::extended_cache_
protected

在文件 concurrent_object_pool.h241 行定义.

◆ kDefaultCacheSize

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
const size_t apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::kDefaultCacheSize
protected

在文件 concurrent_object_pool.h239 行定义.

◆ kInitializer

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
const Initializer apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::kInitializer
staticprotected

在文件 concurrent_object_pool.h242 行定义.

◆ mutex_

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
std::mutex apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::mutex_
protected

在文件 concurrent_object_pool.h235 行定义.

◆ queue_

template<class ObjectType , size_t N = kPoolDefaultSize, class Initializer = ObjectPoolDefaultInitializer<ObjectType>>
std::queue<ObjectType*> apollo::perception::base::ConcurrentObjectPool< ObjectType, N, Initializer >::queue_
protected

在文件 concurrent_object_pool.h236 行定义.


该类的文档由以下文件生成: