21 #ifndef ATLAS_C_FACTORIES_H 22 #define ATLAS_C_FACTORIES_H 25 #include <Atlas/Objects/Root.h> 26 #include <Atlas/Objects/SmartPtr.h> 36 static SmartPtr <RootData> factory(
const std::string&,
int) {
41 static SmartPtr <RootData> defaultInstance(
const std::string&,
int) {
42 return T::allocator.getDefaultObjectInstance();
46 SmartPtr <RootData> generic_factory(
const std::string& name,
int no);
48 SmartPtr <RootData> anonymous_factory(
const std::string& name,
int no);
50 typedef Root (* FactoryMethod)(
const std::string&, int);
52 typedef Root (* DefaultInstanceMethod)(
const std::string&, int);
74 typedef std::map<const std::string, Factory> FactoryMap;
85 bool hasFactory(
const std::string& name)
const;
87 Root createObject(
const std::string& name)
const;
96 Root createObject(
const Atlas::Message::MapType& msg)
const;
103 Root createObject(Atlas::Message::MapType&& msg)
const;
105 Root getDefaultInstance(
const std::string& name)
const;
107 std::list<std::string> getKeys()
const;
109 int addFactory(
const std::string& name, FactoryMethod method, DefaultInstanceMethod defaultInstanceMethod);
111 void installStandardTypes();
118 std::vector<Root> parseListOfObjects(
const Atlas::Message::ListType& val)
const;
120 std::vector<Root> parseListOfObjects(Atlas::Message::ListType&& val)
const;
126 FactoryMap m_factories;
129 Root instantiateObject(
const Atlas::Message::MapType& msg)
const;
140 void addFactory(
const std::string& name, FactoryMethod method, DefaultInstanceMethod defaultInstanceMethod,
int classno);
152 void addFactory(
const std::string& name,
int classno);
156 void Factories::addFactory(
const std::string& name,
int classno) {
157 addFactory(name, &factory<T>, &defaultInstance<T>, classno);
163 #endif //ATLAS_C_FACTORIES_H DefaultInstanceMethod default_instance_method
FactoryMethod factory_method