26 namespace perception {
32 Any() : content_(NULL) {}
34 template <
typename ValueType>
36 : content_(new Holder<ValueType>(value)) {}
39 : content_(other.content_ ? other.content_->Clone() : nullptr) {}
41 ~Any() {
delete content_; }
43 template <
typename ValueType>
45 return content_ ? &(
static_cast<Holder<ValueType> *
>(content_)->held_)
52 virtual ~PlaceHolder() {}
53 virtual PlaceHolder *Clone()
const = 0;
56 template <
typename ValueType>
57 class Holder :
public PlaceHolder {
59 explicit Holder(
const ValueType &
value) : held_(value) {}
61 virtual PlaceHolder *Clone()
const {
return new Holder(held_); }
66 PlaceHolder *content_;
80 typedef std::map<std::string, ObjectFactory *>
FactoryMap;
85 const std::string &base_class_name,
86 std::vector<std::string> *registered_derived_classes_names);
92 #define PERCEPTION_REGISTER_REGISTERER(base_class) \ 93 class base_class##Registerer { \ 94 typedef ::apollo::perception::lib::Any Any; \ 95 typedef ::apollo::perception::lib::FactoryMap FactoryMap; \ 98 static base_class *GetInstanceByName(const ::std::string &name) { \ 100 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \ 101 FactoryMap::iterator iter = map.find(name); \ 102 if (iter == map.end()) { \ 103 for (auto c : map) { \ 104 AERROR << "Instance:" << c.first; \ 106 AERROR << "Get instance " << name << " failed."; \ 109 Any object = iter->second->NewInstance(); \ 110 return *(object.AnyCast<base_class *>()); \ 112 static std::vector<base_class *> GetAllInstances() { \ 113 std::vector<base_class *> instances; \ 115 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \ 116 instances.reserve(map.size()); \ 117 for (auto item : map) { \ 118 Any object = item.second->NewInstance(); \ 119 instances.push_back(*(object.AnyCast<base_class *>())); \ 123 static const ::std::string GetUniqInstanceName() { \ 125 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \ 126 CHECK_EQ(map.size(), 1U) << map.size(); \ 127 return map.begin()->first; \ 129 static base_class *GetUniqInstance() { \ 131 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \ 132 CHECK_EQ(map.size(), 1U) << map.size(); \ 133 Any object = map.begin()->second->NewInstance(); \ 134 return *(object.AnyCast<base_class *>()); \ 136 static bool IsValid(const ::std::string &name) { \ 138 ::apollo::perception::lib::GlobalFactoryMap()[#base_class]; \ 139 return map.find(name) != map.end(); \ 143 #define PERCEPTION_REGISTER_CLASS(clazz, name) \ 145 class ObjectFactory##name : public apollo::perception::lib::ObjectFactory { \ 147 virtual ~ObjectFactory##name() {} \ 148 virtual ::apollo::perception::lib::Any NewInstance() { \ 149 return ::apollo::perception::lib::Any(new name()); \ 152 __attribute__((constructor)) void RegisterFactory##name() { \ 153 ::apollo::perception::lib::FactoryMap &map = \ 154 ::apollo::perception::lib::GlobalFactoryMap()[#clazz]; \ 155 if (map.find(#name) == map.end()) map[#name] = new ObjectFactory##name(); \ Any(const ValueType &value)
Definition: registerer.h:35
std::map< std::string, FactoryMap > BaseClassMap
Definition: registerer.h:81
Definition: registerer.h:30
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
Any()
Definition: registerer.h:32
ObjectFactory()
Definition: registerer.h:71
ValueType * AnyCast()
Definition: registerer.h:44
virtual ~ObjectFactory()
Definition: registerer.h:72
BaseClassMap & GlobalFactoryMap()
bool GetRegisteredClasses(const std::string &base_class_name, std::vector< std::string > *registered_derived_classes_names)
Definition: registerer.h:69
Any(const Any &other)
Definition: registerer.h:38
virtual Any NewInstance()
Definition: registerer.h:73
apollo::cyber::base::std value
~Any()
Definition: registerer.h:41
std::map< std::string, ObjectFactory * > FactoryMap
Definition: registerer.h:80