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;
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();
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