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) override { myExecVec.push_back(item); }
40 
43  virtual void remove(Texec* item) override
44  { myExecVec.erase(std::remove(myExecVec.begin(), myExecVec.end(), item), myExecVec.end()); }
45 
47  virtual void clear() override { myExecVec.clear(); }
48 
52  virtual void deleteAndClear() override;
53 
56  virtual bool empty() const { return myExecVec.empty(); }
57 
61  virtual bool contains(Texec *item) { return std::find(begin(), end(), item) != end(); }
62 
65  virtual SecIteratorType begin() { return myExecVec.begin(); }
67  virtual SecIteratorType end() { return myExecVec.end(); }
68 
71  virtual void executeMethod(void (Texec::*theMethodPtr)()) override;
72 
73 protected:
74 
77 
78 };
79 
80 template<class Texec>
82 {
85  for (SecIteratorType item = begin(); item != end(); ++item)
86  {
87  delete (*item);
88  }
89  clear();
90 }
91 
92 template<class Texec>
93 inline void DtSequentialExecutionContainer<Texec>::executeMethod(void (Texec::*theMethodPtr)())
94 {
95  if (empty())
96  {
97  return;
98  }
99 
102  for (SecIteratorType item = begin(); item != end(); ++item)
103  {
104  ((**item).*theMethodPtr)();
105  }
106 }
virtual bool empty() const
Check if container is empty.
Definition: sequentialExecutionContainer.h:56
Contains the DtExecutionContainer class declarations.
SecContainerType::iterator SecIteratorType
Definition: sequentialExecutionContainer.h:23
virtual void add(Texec *item) override
Add a reference to the container.
Definition: sequentialExecutionContainer.h:39
virtual void executeMethod(void(Texec::*theMethodPtr)()) override
Execute method on all contained objects sequentially in a single thread.
Definition: sequentialExecutionContainer.h:93
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 SecIteratorType begin()
Note: linux toolchain doesn&#39;t support const_iterator. :( Begin iterator over the container.
Definition: sequentialExecutionContainer.h:65
virtual bool contains(Texec *item)
Check if container contains item.
Definition: sequentialExecutionContainer.h:61
virtual void deleteAndClear() override
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:81
virtual SecIteratorType end()
End iterator over the container.
Definition: sequentialExecutionContainer.h:67
virtual void clear() override
Clear the container.
Definition: sequentialExecutionContainer.h:47
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:76
DtSequentialExecutionContainer is implementation of DtExecutionContainer which executes methods on al...
Definition: sequentialExecutionContainer.h:18

Document ID: Generated on Thu Oct 23 22:29:17 EDT 2025 from SVN revision 280951
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)