Line data Source code
1 : #ifndef artdaq_Application_TaskType_hh
2 : #define artdaq_Application_TaskType_hh
3 :
4 : /**
5 : * \brief The artdaq namespace
6 : */
7 : namespace artdaq {
8 : /**
9 : * \brief The artdaq::detail namespace contains internal implementation details for some classes
10 : */
11 : namespace detail {
12 : /**
13 : * \brief The types of applications in artdaq
14 : */
15 : enum TaskType : int
16 : {
17 : BoardReaderTask = 1,
18 : EventBuilderTask = 2,
19 : DataLoggerTask = 3,
20 : DispatcherTask = 4,
21 : RoutingManagerTask = 5,
22 : UnknownTask
23 : };
24 :
25 : /// <summary>
26 : /// Convert a string to a TaskType (Used by artdaq.cc)
27 : /// </summary>
28 : /// <param name="task">Name of the task</param>
29 : /// <returns>Corresponding TaskType or TaskType::UnknownTask if no match</returns>
30 0 : inline TaskType StringToTaskType(std::string const& task)
31 : {
32 0 : if (task.empty()) return TaskType::UnknownTask;
33 0 : if (task[0] == 'b' || task[0] == 'B') return TaskType::BoardReaderTask;
34 0 : if (task[0] == 'e' || task[0] == 'E') return TaskType::EventBuilderTask;
35 0 : if (task[0] == 'r' || task[0] == 'R') return TaskType::RoutingManagerTask;
36 0 : if (task[0] == 'd' || task[0] == 'D')
37 : {
38 0 : if (task.size() < 2) return TaskType::UnknownTask;
39 0 : if (task[1] == 'a' || task[1] == 'A') return TaskType::DataLoggerTask;
40 0 : if (task[1] == 'i' || task[1] == 'I') return TaskType::DispatcherTask;
41 : }
42 :
43 0 : return TaskType::UnknownTask;
44 : }
45 :
46 : /// <summary>
47 : /// Convert an integer to the corresponding TaskType
48 : /// </summary>
49 : /// <param name="task">Enumeration identifier of Task</param>
50 : /// <returns>Corresponding TaskType or TaskType::UnknownTask if no match</returns>
51 0 : inline TaskType IntToTaskType(int const& task)
52 : {
53 0 : if (task > 0 && task <= 5)
54 0 : return static_cast<TaskType>(task);
55 :
56 0 : return TaskType::UnknownTask;
57 : }
58 :
59 : /// <summary>
60 : /// Convert a TaskType to string representation
61 : /// </summary>
62 : /// <param name="task">TaskType to convert</param>
63 : /// <returns>String represenation of Task name</returns>
64 0 : inline std::string TaskTypeToString(TaskType const& task)
65 : {
66 0 : switch (task)
67 : {
68 0 : case (BoardReaderTask):
69 0 : return "BoardReader";
70 0 : case (EventBuilderTask):
71 0 : return "EventBuilder";
72 0 : case (DataLoggerTask):
73 0 : return "DataLogger";
74 0 : case (DispatcherTask):
75 0 : return "Dispatcher";
76 0 : case (RoutingManagerTask):
77 0 : return "RoutingManager";
78 0 : default:
79 0 : break;
80 : }
81 0 : return "Unknown";
82 : }
83 :
84 : inline TraceStreamer& operator<<(TraceStreamer& x, TaskType r)
85 : {
86 : return x << TaskTypeToString(r);
87 : }
88 : } // namespace detail
89 :
90 : using detail::TaskType; // Require C++2011 scoping, hide C++03 scoping.
91 : } // namespace artdaq
92 :
93 : #endif /* artdaq_Application_TaskType_hh */
|