181 {
182 std::map<double, ListIterator> msg_map_tem;
183 std::list<std::pair<double, MessageType>> msg_list_tem;
184
185 if (!WaitMessageBufferOk(timestamp, &msg_map_tem, &msg_list_tem,
186 timeout_s * 100)) {
187 return false;
188 }
189
190 auto found_iter = msg_map_tem.find(timestamp);
191 if (found_iter != msg_map_tem.end()) {
192 *msg = found_iter->second->second;
193 return true;
194 }
195
197 if (begin_iter->first > timestamp) {
198 return false;
199 }
200
203 for (
ListIterator iter = msg_list_tem.end(); iter != msg_list_tem.begin();) {
204 --iter;
205 if (iter->first > timestamp) {
206 after_iter = iter;
207 } else {
208 before_iter = iter;
209
210 double delta_time = after_iter->first - before_iter->first;
211
212
213
214 if (std::abs(delta_time) < 1e-9) {
215 AERROR <<
"Delta_time is too small.";
216 return false;
217 }
218 double scale = (
timestamp - before_iter->first) / delta_time;
219 *msg = before_iter->second.interpolate(scale, after_iter->second);
221 break;
222 }
223 }
224 return true;
225}
std::list< std::pair< double, MessageType > >::iterator ListIterator