提交 f47323ee 编写于 作者: D Dong Li 提交者: Capri2014

added missing indexed_queue (#332)

上级 235c7dff
/******************************************************************************
* Copyright 2017 The Apollo Authors. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*****************************************************************************/
/**
* @file:
**/
#ifndef MODULES_PLANNING_COMMON_INDEXED_QUEUE_H_
#define MODULES_PLANNING_COMMON_INDEXED_QUEUE_H_
#include <memory>
#include <queue>
#include <unordered_map>
namespace apollo {
namespace planning {
template <typename I, typename T>
class IndexedQueue {
public:
IndexedQueue(std::size_t max_queue_size) : max_queue_size_(max_queue_size){};
T *Find(const I id) const {
auto iter = map_.find(id);
if (iter == map_.end()) {
return nullptr;
} else {
return iter->second.get();
}
}
const T *Latest() const {
if (queue_.empty()) {
return nullptr;
}
return Find(queue_.back().first);
}
bool Add(const I id, std::unique_ptr<T> ptr) {
if (Find(id)) {
return false;
}
if (!queue_.empty() && queue_.size() == max_queue_size_) {
const auto &front = queue_.top();
map_.erase(front.first);
queue_.pop_front();
}
queue_.push_back(std::make_pair<I, ptr>(id, ptr.get()));
map_[id] = std::move(ptr);
return true;
}
public:
std::size_t max_queue_size_ = 0;
std::queue<std::pair<I, const T *>> queue_;
std::unordered_map<I, std::unique_ptr<T>> map_;
};
} // namespace planning
} // namespace apollo
#endif // MODULES_PLANNING_COMMON_DATA_CENTER_H_
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册