Gyoto::space::Subcontractor_t* \
Gyoto::space::getSubcontractor(std::string name, std::vector<std::string> &plugin, int errmode) { \
for (size_t i=0; i<plugin.size(); ++i) { \
GYOTO_DEBUG_EXPR(plugin[i]); \
Gyoto::requirePlugin(plugin[i]); \
} \
if (!Gyoto::space::Register_) throwError(
"No " GYOTO_STRINGIFY(space)
" kind registered!"); \
Subcontractor_t* sctr= NULL; \
std::string plg(""); \
if (!plugin.size()) { \
sctr = \
(Subcontractor_t*)Gyoto::space::Register_ \
-> getSubcontractor(name, plg, errmode); \
plugin.push_back(plg); \
} \
for (size_t i=plugin.size()-1; i>=0 && sctr == NULL; --i) { \
sctr= \
} \
if (!errmode && !sctr)
throwError (
"Kind not found in the specified plug-ins: "+name); \
return sctr; \
}
#define GYOTO_STRINGIFY(a)
Stringify macro content.
Definition GyotoDefs.h:568
SmartPointer< Gyoto::Astrobj::Generic > Subcontractor_t(Gyoto::FactoryMessenger *, std::vector< std::string > const &)
A function to build instances of a specific Astrobj::Generic sub-class.
Definition GyotoAstrobj.h:63
Gyoto::Astrobj::Subcontractor_t * getSubcontractor(std::string name, std::vector< std::string > &plugin, int errmode=0)
Query the Astrobj register.
void throwError(std::string)
Throw a Gyoto::Error.