21#ifndef ATLAS_C_FACTORIES_H
22#define ATLAS_C_FACTORIES_H
25#include <Atlas/Objects/Root.h>
26#include <Atlas/Objects/SmartPtr.h>
36static SmartPtr <RootData> factory(
const std::string&,
int) {
41static SmartPtr <RootData> defaultInstance(
const std::string&,
int) {
42 return T::allocator.getDefaultObjectInstance();
46SmartPtr <RootData> generic_factory(
const std::string& name,
int no);
48SmartPtr <RootData> anonymous_factory(
const std::string& name,
int no);
50typedef Root (* FactoryMethod)(
const std::string&, int);
52typedef Root (* DefaultInstanceMethod)(
const std::string&, int);
74typedef 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);
156void Factories::addFactory(
const std::string& name,
int classno) {
157 addFactory(name, &factory<T>, &defaultInstance<T>, classno);
Root createObject(const Atlas::Message::MapType &msg) const
std::vector< Root > parseListOfObjects(const Atlas::Message::ListType &val) const
FactoryMethod factory_method
DefaultInstanceMethod default_instance_method