VR-Forces 4.3.1 Class Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
parallelTickManager.h
Go to the documentation of this file.
1 /*******************************************************************************
2 ** Copyright (c) 2014 MAK Technologies, Inc.
3 ** All rights reserved.
4 *******************************************************************************/
5 
9 
12 
13 #pragma once
14 
15 #include "vrfcore/vrfcoreDefines.h"
16 #include "vrfutil/callbackQueue.h"
17 
18 #include <tbb/mutex.h>
19 #include <tbb/compat/condition_variable>
20 
21 #include <boost/noncopyable.hpp>
22 
23 #include <boost/unordered/unordered_map.hpp>
24 
28 
50 class DT_DLL_vrfcore DtParallelTickManager : boost::noncopyable
51 {
52 public:
57  class DT_DLL_vrfcore ParallelScopeGuard : boost::noncopyable
58  {
60  bool myReadFlag;
61 
62  public:
63  explicit ParallelScopeGuard(DtParallelTickManager*, bool read=false);
65 
66  bool release();
67  void acquire(DtParallelTickManager*, bool read=false);
68  };
69 
74  class DT_DLL_vrfcore SerialScopeGuard : boost::noncopyable
75  {
78 
79  public:
80  explicit SerialScopeGuard(DtParallelTickManager*, bool write=true);
82 
83  bool upgradeToWriter();
84  void downgradeToReader();
85 
86  void release();
87  void acquire(DtParallelTickManager*, bool write=true);
88  };
89 
93  {
94  friend class DtParallelTickManager;
95 
97  void run();
98 
99  public:
100  virtual ~CallbackInterface();
101 
103  virtual void runCallback() = 0;
104  };
105 
108  {
111 
113  void run();
114 
115  public:
117 
118  void setParallelTickManager(DtParallelTickManager*);
119  };
120 
121  typedef boost::unordered_map<std::string, bool> EnabledMap;
122 
124  virtual ~DtParallelTickManager();
125 
127  virtual void setCallbackQueue(DtCallbackQueue*);
128 
130  virtual DtCallbackQueue* queue() const;
131 
138 
139  virtual void flushQueue(bool useThisThread);
140  virtual void flushQueue();
142 
144 
145  virtual bool mainThreadWait() const;
146  virtual void setMainThreadWait(bool);
148 
151 
152  virtual bool active() const;
153  virtual void setActive(bool);
155 
164  virtual bool enabled(const std::string&, bool def) const;
165 
167  virtual bool executeCommand(const std::string&, bool on);
168 
170  virtual void printInfo(std::ostream&) const;
171 
179 
180  virtual void addCallback(CallbackInterface*, bool runNow=false);
181  virtual void addCallback(CallbackInterface&, bool runNow=false);
182  virtual void addCallback(SerialCallbackInterface*, bool runNow=false);
183  virtual void addCallback(SerialCallbackInterface&, bool runNow=false);
184 
185  virtual void addCallback(CallbackInterface*, const std::string& tag, bool def=true);
186  virtual void addCallback(CallbackInterface&, const std::string& tag, bool def=true);
187  virtual void addCallback(SerialCallbackInterface*, const std::string& tag, bool def=true);
188  virtual void addCallback(SerialCallbackInterface&, const std::string& tag, bool def=true);
189 
190  void addCallback(CallbackInterface*, const char* tag, bool def=true);
191  void addCallback(CallbackInterface&, const char* tag, bool def=true);
192  void addCallback(SerialCallbackInterface*, const char* tag, bool def=true);
193  void addCallback(SerialCallbackInterface&, const char* tag, bool def=true);
194 
195  template <typename Container>
196  void addCallbacks(Container& cont, bool runNow=false)
197  {
198  typedef typename Container::iterator iterator;
199  for (iterator i=cont.begin(), end=cont.end(); i != end; ++i)
200  addCallback(*i, runNow);
201  }
202 
203  template <typename Container>
204  void addCallbacks(Container& cont, const std::string& tag, bool def=true)
205  {
206  bool runNow = !enabled(tag, def);
207  typedef typename Container::iterator iterator;
208  for (iterator i=cont.begin(), end=cont.end(); i != end; ++i)
209  addCallback(*i, runNow);
210  }
211 
212  template <typename Container>
213  void addCallbacks(Container& cont, const char* tag, bool def=true)
214  {
215  addCallbacks(cont, std::string(tag), def);
216  }
218 
219 private:
221 
222  virtual void lock();
223  virtual void unlock();
224  virtual void readLock();
225  virtual void readUnlock();
226  virtual bool upgradeToWriter();
227  virtual void downgradeToReader();
229 
231  virtual void createCallbackQueue(bool force=false);
232 
233  typedef tbb::mutex Mutex;
234  typedef tbb::interface5::condition_variable Condition;
235  typedef tbb::interface5::unique_lock<Mutex> Lock;
236 
240 
243 
246 
249 };

Document ID: Generated on Wed Jul 29 00:55:00 EDT 2015 from SVN revision 155257
Copyright © 2005-2015 VT MÄK. All Rights Reserved (www.mak.com)