VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
sequentialExecutionContainer.h
Go to the documentation of this file.
1 /****************************************************************************
2  * Copyright (c) 2014 VT MAK
3  * All rights reserved.
4  ****************************************************************************/
5 
8 
9 #pragma once
10 
12 #include <vector>
13 
17 template <class Texec>
19 {
20 public:
21 
22  typedef typename std::vector<Texec *> SecContainerType;
23  typedef typename SecContainerType::iterator SecIteratorType;
24 
25 public:
26 
29  : myExecVec()
30  {
31  }
32 
36 
39  virtual void add(Texec *item) { myExecVec.push_back(item); }
40 
43  virtual void remove(Texec *item) { myExecVec.erase(std::remove(myExecVec.begin(), myExecVec.end(), item), myExecVec.end()); }
44 
46  virtual void clear() { myExecVec.clear(); }
47 
51  virtual void deleteAndClear();
52 
55  virtual bool empty() const { return myExecVec.empty(); }
56 
60  virtual bool contains(Texec *item) { return std::find(begin(), end(), item) != end(); }
61 
64  virtual SecIteratorType begin() { return myExecVec.begin(); }
66  virtual SecIteratorType end() { return myExecVec.end(); }
67 
70  virtual void executeMethod(void (Texec::*theMethodPtr)());
71 
72 protected:
73 
76 
77 };
78 
79 template<class Texec>
81 {
84  for (SecIteratorType item = begin(); item != end(); ++item)
85  {
86  delete (*item);
87  }
88  clear();
89 }
90 
91 template<class Texec>
92 inline void DtSequentialExecutionContainer<Texec>::executeMethod(void (Texec::*theMethodPtr)())
93 {
94  if (empty())
95  {
96  return;
97  }
98 
101  for (SecIteratorType item = begin(); item != end(); ++item)
102  {
103  ((**item).*theMethodPtr)();
104  }
105 }
virtual bool empty() const
Check if container is empty.
Definition: sequentialExecutionContainer.h:55
Contains the DtExecutionContainer class declarations.
virtual void clear()
Clear the container.
Definition: sequentialExecutionContainer.h:46
SecContainerType::iterator SecIteratorType
Definition: sequentialExecutionContainer.h:23
virtual void executeMethod(void(Texec::*theMethodPtr)())
Execute method on all contained objects sequentially in a single thread.
Definition: sequentialExecutionContainer.h:92
virtual ~DtSequentialExecutionContainer()
Virtual destructor does NOT destroy contents. Call deleteAndClear explicitly to delete contents...
Definition: sequentialExecutionContainer.h:35
DtSequentialExecutionContainer()
Construct a new container, default to parallel execution and grain_size of 10.
Definition: sequentialExecutionContainer.h:28
virtual void deleteAndClear()
Delete all referenced objects and then clear the container. Items are deleted sequentially, not in parallel, so item&#39;s destructor isn&#39;t required to be thread safe.
Definition: sequentialExecutionContainer.h:80
virtual SecIteratorType begin()
Note: linux toolchain doesn&#39;t support const_iterator. :( Begin iterator over the container.
Definition: sequentialExecutionContainer.h:64
virtual bool contains(Texec *item)
Check if container contains item.
Definition: sequentialExecutionContainer.h:60
virtual SecIteratorType end()
End iterator over the container.
Definition: sequentialExecutionContainer.h:66
std::vector< Texec * > SecContainerType
Definition: sequentialExecutionContainer.h:22
DtExecutionContainer is only the definition of a container which executes methods on all contained ob...
Definition: executionContainer.h:19
SecContainerType myExecVec
The execution container.
Definition: sequentialExecutionContainer.h:75
virtual void add(Texec *item)
Add a reference to the container.
Definition: sequentialExecutionContainer.h:39
DtSequentialExecutionContainer is implementation of DtExecutionContainer which executes methods on al...
Definition: sequentialExecutionContainer.h:18

Document ID: Generated on Wed Mar 27 22:49:11 EDT 2024 from SVN revision 264633
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)