DISPLACE  1.0
A spatial model of fisheries to help sustainable fishing and maritime spatial planning
outputqueuemanager.h
Go to the documentation of this file.
1 // --------------------------------------------------------------------------
2 // DISPLACE: DYNAMIC INDIVIDUAL VESSEL-BASED SPATIAL PLANNING
3 // AND EFFORT DISPLACEMENT
4 // Copyright (c) 2012-2019 Francois Bastardie <fba@aqua.dtu.dk>
5 
6 // This program is free software; you can redistribute it and/or modify
7 // it under the terms of the GNU General Public License as published by
8 // the Free Software Foundation; either version 2 of the License, or
9 // (at your option) any later version.
10 
11 // This program is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 // GNU General Public License for more details.
15 
16 // You should have received a copy of the GNU General Public License along
17 // with this program; if not, write to the Free Software Foundation, Inc.,
18 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19 // --------------------------------------------------------------------------
20 
21 /* --------------------------------------------------------------------------
22  * DISPLACE: DYNAMIC INDIVIDUAL VESSEL-BASED SPATIAL PLANNING
23  * AND EFFORT DISPLACEMENT
24  * Copyright (c) 2012, 2013, 2014, 2015 Francois Bastardie <fba@aqua.dtu.dk>
25  *
26  * This program is free software; you can redistribute it and/or modify
27  * it under the terms of the GNU General Public License as published by
28  * the Free Software Foundation; either version 2 of the License, or
29  * (at your option) any later version.
30  *
31  * This program is distributed in the hope that it will be useful,
32  * but WITHOUT ANY WARRANTY; without even the implied warranty of
33  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
34  * GNU General Public License for more details.
35  *
36  * You should have received a copy of the GNU General Public License along
37  * with this program; if not, write to the Free Software Foundation, Inc.,
38  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
39  * --------------------------------------------------------------------------
40  */
41 #ifndef OUTPUQUEUEMANAGER_H
42 #define OUTPUQUEUEMANAGER_H
43 
44 #include <ipcqueue.h>
45 
46 #include <thread>
47 #include <condition_variable>
48 
49 #include <queue>
50 #include <list>
51 #include <memory>
52 #include <ostream>
53 
54 #include <memory>
55 
56 class OutputMessage;
57 
60 {
61 public:
62  explicit OutputQueueManager();
63  explicit OutputQueueManager(std::ostream &stream);
64 
65  void disableIpcQueue();
66  void start();
67  void finish();
68 
69  void enqueue(std::shared_ptr<OutputMessage> msg);
70 
71 private:
72  void thread();
73 
74 
75  /* == members == */
76 
77  std::thread mThread;
78  std::mutex mMutex;
79  std::condition_variable mCond;
80 
81  std::queue<std::shared_ptr<OutputMessage> > mQueue;
82 
83  IpcQueue ipcQueue;
84  enum ProtocolType { TextWithStdOut, Binary, None } mType;
85 
86  std::ostream &mOutStream;
87 };
88 
89 #endif // OUTPUQUEUEMANAGER_H
an abstract class to serialize outputs through the OutputQueueManager
Definition: noipc.h:11
void disableIpcQueue()
Definition: outputqueuemanager.cpp:71
A manager for the outputs from all the other simulator threads.
Definition: noipc.h:33
void enqueue(std::shared_ptr< OutputMessage >)
Definition: noipc.h:35
void finish()
Definition: outputqueuemanager.cpp:83
implements a CircularBuffer to be used in a boost::interprocess::managed_heap_memory
Definition: ipcqueue.h:39
void start()
Definition: outputqueuemanager.cpp:76
OutputQueueManager()
Definition: outputqueuemanager.cpp:58