23#include <unordered_map>
26#include <boost/thread/shared_mutex.hpp>
34template <
typename I,
typename T>
45 T*
Add(
const I
id,
const T&
object) {
48 AWARN <<
"object " <<
id <<
" is already in container";
52 object_dict_.insert({id,
object});
53 auto* ptr = &object_dict_.at(
id);
54 object_list_.push_back(ptr);
66 return apollo::common::util::FindOrNull(object_dict_,
id);
75 const T*
Find(
const I
id)
const {
76 return apollo::common::util::FindOrNull(object_dict_,
id);
83 const std::vector<const T*>&
Items()
const {
return object_list_; }
89 const std::unordered_map<I, T>&
Dict()
const {
return object_dict_; }
95 this->object_list_.clear();
96 this->object_dict_.clear();
97 for (
const auto& item : other.
Dict()) {
98 Add(item.first, item.second);
104 std::vector<const T*> object_list_;
105 std::unordered_map<I, T> object_dict_;
108template <
typename I,
typename T>
111 T*
Add(
const I
id,
const T&
object) {
112 boost::unique_lock<boost::shared_mutex> writer_lock(mutex_);
117 boost::shared_lock<boost::shared_mutex> reader_lock(mutex_);
121 std::vector<const T*>
Items()
const {
122 boost::shared_lock<boost::shared_mutex> reader_lock(mutex_);
127 mutable boost::shared_mutex mutex_;
const std::unordered_map< I, T > & Dict() const
List all the items in the container.
T * Find(const I id)
Find object by id in the container
T * Add(const I id, const T &object)
copy object into the container.
const T * Find(const I id) const
Find object by id in the container
const std::vector< const T * > & Items() const
List all the items in the container.
IndexedList & operator=(const IndexedList &other)
Copy the container with objects.
T * Add(const I id, const T &object)
std::vector< const T * > Items() const
Planning module main class.