comparison Framework/MultiThreading/BagOfTasks.h @ 154:32a94bbb7d05

merge
author Sebastien Jodogne <s.jodogne@gmail.com>
date Mon, 08 Oct 2018 12:12:39 +0200
parents fb8d4cd2f618
children 6b8ccfc02051
comparison
equal deleted inserted replaced
153:b798d200ac90 154:32a94bbb7d05
1 /**
2 * Orthanc - A Lightweight, RESTful DICOM Store
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics
4 * Department, University Hospital of Liege, Belgium
5 * Copyright (C) 2017-2018 Osimis S.A., Belgium
6 *
7 * This program is free software: you can redistribute it and/or
8 * modify it under the terms of the GNU Affero General Public License
9 * as published by the Free Software Foundation, either version 3 of
10 * the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but
13 * WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 * Affero General Public License for more details.
16 *
17 * You should have received a copy of the GNU Affero General Public License
18 * along with this program. If not, see <http://www.gnu.org/licenses/>.
19 **/
20
21
22 #pragma once
23
24 #include "ICommand.h"
25
26 #include <list>
27 #include <cstddef>
28
29 namespace Orthanc
30 {
31 class BagOfTasks : public boost::noncopyable
32 {
33 private:
34 typedef std::list<ICommand*> Tasks;
35
36 Tasks tasks_;
37
38 public:
39 ~BagOfTasks()
40 {
41 for (Tasks::iterator it = tasks_.begin(); it != tasks_.end(); ++it)
42 {
43 delete *it;
44 }
45 }
46
47 ICommand* Pop()
48 {
49 ICommand* task = tasks_.front();
50 tasks_.pop_front();
51 return task;
52 }
53
54 void Push(ICommand* task) // Takes ownership
55 {
56 if (task != NULL)
57 {
58 tasks_.push_back(task);
59 }
60 }
61
62 size_t GetSize() const
63 {
64 return tasks_.size();
65 }
66
67 bool IsEmpty() const
68 {
69 return tasks_.empty();
70 }
71 };
72 }