提交 f8644731 编写于 作者: D Dong Li 提交者: lianglia-apollo

added IndexedList container type

上级 8030aad8
...@@ -16,14 +16,19 @@ cc_library( ...@@ -16,14 +16,19 @@ cc_library(
) )
cc_library( cc_library(
name = "object_table", name = "indexed_list",
srcs = [ hdrs = [
"object_table.cc", "indexed_list.h",
], ],
)
cc_library(
name = "object_table",
hdrs = [ hdrs = [
"object_table.h", "object_table.h",
], ],
deps = [ deps = [
":indexed_list",
":obstacle", ":obstacle",
":planning_gflags", ":planning_gflags",
], ],
......
...@@ -15,38 +15,42 @@ ...@@ -15,38 +15,42 @@
*****************************************************************************/ *****************************************************************************/
/** /**
* @file object_table.cc * @file indexed_list.h
**/ **/
#include "modules/planning/common/object_table.h" #ifndef MODULES_PLANNING_COMMON_INDEXED_LIST_H_
#define MODULES_PLANNING_COMMON_INDEXED_LIST_H_
#include <memory> #include <memory>
#include <utility> #include <unordered_map>
#include <vector>
#include "modules/common/log.h"
namespace apollo { namespace apollo {
namespace planning { namespace planning {
Obstacle* ObjectTable::get_obstacle(const uint32_t id) { template <typename I, typename T>
return get_obstacle(std::to_string(id)); class IndexedList {
} public:
void Add(const I id, std::unique_ptr<T> ptr) {
Obstacle* ObjectTable::get_obstacle(const std::string& id) { _object_list.push_back(ptr.get());
auto iter = _obstacle_cache.find(id); _object_dict[id] = std::move(ptr);
if (iter != _obstacle_cache.end()) { }
return iter->second.get(); T* Find(const I id) {
} else { auto iter = _object_dict.find(id);
AERROR << "Failed to find object " << id; if (iter == _object_dict.end()) {
return nullptr; return nullptr;
} else {
return iter->second.get();
} }
} }
const std::vector<T*>& Items() const { return _object_list; }
void ObjectTable::add_obstacle(const Obstacle& obstacle) { private:
auto ptr = std::unique_ptr<Obstacle>(); std::vector<const T*> _object_list;
*ptr = obstacle; std::unordered_map<I, std::unique_ptr<T>> _object_dict;
_obstacle_cache[ptr->Id()] = std::move(ptr); };
}
} // namespace planning } // namespace planning
} // namespace apollo } // namespace apollo
#endif // MODULES_PLANNING_COMMON_INDEXED_LIST_H
...@@ -25,22 +25,14 @@ ...@@ -25,22 +25,14 @@
#include <string> #include <string>
#include <unordered_map> #include <unordered_map>
#include "modules/planning/common/indexed_list.h"
#include "modules/planning/common/obstacle.h" #include "modules/planning/common/obstacle.h"
#include "modules/planning/common/planning_gflags.h" #include "modules/planning/common/planning_gflags.h"
namespace apollo { namespace apollo {
namespace planning { namespace planning {
class ObjectTable { using ObjectTable = IndexedList<uint32_t, Obstacle>;
public:
ObjectTable() = default;
Obstacle* get_obstacle(const uint32_t id);
Obstacle* get_obstacle(const std::string& id);
void add_obstacle(const Obstacle& obstacle);
private:
std::unordered_map<std::string, std::unique_ptr<Obstacle>> _obstacle_cache;
};
} // namespace planning } // namespace planning
} // namespace apollo } // namespace apollo
......
...@@ -300,8 +300,7 @@ Status DpStGraph::get_object_decision(const StGraphData& st_graph_data, ...@@ -300,8 +300,7 @@ Status DpStGraph::get_object_decision(const StGraphData& st_graph_data,
CHECK_EQ(boundary_it->points().size(), 4); CHECK_EQ(boundary_it->points().size(), 4);
Obstacle* object_ptr = Obstacle* object_ptr =
DataCenter::instance()->mutable_object_table()->get_obstacle( DataCenter::instance()->mutable_object_table()->Find(boundary_it->id());
boundary_it->id());
if (!object_ptr) { if (!object_ptr) {
AERROR << "Failed to find object " << boundary_it->id(); AERROR << "Failed to find object " << boundary_it->id();
return Status(ErrorCode::PLANNING_ERROR, return Status(ErrorCode::PLANNING_ERROR,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册