20 #include <basic/Tracer.hh>
23 #include <utility/vector0.hh>
24 #include <utility/vector1.hh>
25 #include <utility/exit.hh>
28 #include <boost/foreach.hpp>
29 #define foreach BOOST_FOREACH
37 namespace loops_definers {
41 using std::stringstream;
45 static basic::Tracer
tr(
"protocols.loops.loops_definers.LoopsDefinerFactory");
73 types_[ creator->type_name() ] = creator;
78 string const & type_name
80 LoopsDefinerCreatorMap::const_iterator iter =
types_.find( type_name );
81 return iter !=
types_.end();
89 tr.Trace <<
"generate LoopsDefiner of type " << type_name << std::endl;
90 LoopsDefinerCreatorMap::const_iterator iter =
types_.find( type_name );
91 if (iter !=
types_.end()) {
92 return iter->second->create_loops_definer();
94 stringstream error_msg;
96 <<
"Attempting to create unrecognized LoopsDefiner "
97 <<
"'" << type_name <<
"'." << endl
98 <<
"check spelling or "
99 <<
"register a new LoopsDefiner with the LoopsDefinerFactory" << endl
100 <<
"known LoopsDefiner types are:" << endl;
102 foreach(
const LoopsDefinerCreatorMap::value_type& type,
types_){
103 error_msg <<
"\t" << type.first << endl;
105 utility_exit_with_message(error_msg.str());
114 LoopsDefinerCreatorMap::const_iterator iter =
types_.begin();
115 while ( iter !=
types_.end() ) {
116 collection.push_back(iter->first);