24 #ifndef GRAPHLAB_SCHEDULER_FACTORY_HPP
25 #define GRAPHLAB_SCHEDULER_FACTORY_HPP
30 #include <graphlab/options/graphlab_options.hpp>
31 #include <graphlab/scheduler/scheduler_list.hpp>
33 #include <boost/preprocessor.hpp>
42 template<
typename Message>
44 typedef Message message_type;
50 template<
typename Scheduler>
54 new Scheduler(num_vertices, opts);
55 ASSERT_TRUE(scheduler_ptr != NULL);
62 static ischeduler_type*
65 #define __GENERATE_NEW_SCHEDULER__(r_unused, data_unused, i, elem) \
66 BOOST_PP_EXPR_IF(i, else) \
67 if (scheduler_str == BOOST_PP_TUPLE_ELEM(3,0,elem)) { \
68 typedef BOOST_PP_TUPLE_ELEM(3,1,elem)<Message> \
70 return new_scheduler_impl<scheduler_type> \
71 ( num_vertices, opts); \
74 BOOST_PP_SEQ_FOR_EACH_I(__GENERATE_NEW_SCHEDULER__, _, __SCHEDULER_LIST__);
75 #undef __GENERATE_NEW_SCHEDULER__
77 <<
"Invalid scheduler type: " << scheduler_str << std::endl;