00001 #ifndef ACTIVITIES_HH_ 00002 # define ACTIVITIES_HH_ 00003 00004 # include <string> 00005 # include <list> 00006 00007 # include "tasks_fwd.hh" 00008 00009 namespace tasks 00010 { 00011 class ActivityMaker 00012 { 00013 public: 00014 ActivityMaker(); 00015 00016 const std::string &get_name(); 00017 virtual Activity &make() = 0; 00018 00019 protected: 00020 std::string _name; 00021 }; 00022 00023 template<typename ACTIVITY_CLASS> 00024 class DefActivityMaker : public ActivityMaker 00025 { 00026 public: 00027 DefActivityMaker(); 00028 00029 Activity &make(); 00030 }; 00031 00032 class Activities : public std::list<ActivityMaker *> 00033 { 00034 public: 00035 ~Activities(); 00036 00037 static Activities &get_instance(); 00038 00039 const std::list<std::string> &get_name_list(); 00040 Activity *make(const std::string &name); 00041 00042 private: 00043 Activities(); 00044 }; 00045 } 00046 00047 # include "activities.hxx" 00048 00049 #endif