ppap4lmp  0.7.2
processor.cpp
Go to the documentation of this file.
1 
9 #include <stdio.h>
10 
11 #include "processor.h"
12 
13 /* ------------------------------------------------------------------ */
14 
15 template <class GEN>
17  const ShPtr<GEN> &gen)
18 {
19  generators.clear();
20 
21  generators.push_back(gen);
22 
23  n_generators = generators.size();
24 }
25 
26 template void Processor::register_generator(
27  const ElPtr &gen);
28 template void Processor::register_generator(
29  const ShPtr<GenDict> &gen);
30 template void Processor::register_generator(
31  const ShPtr<GenList> &gen);
32 
33 /* ------------------------------------------------------------------ */
34 
35 template <class GEN>
37  const Vec<ShPtr<GEN>> &gens)
38 {
39  generators.clear();
40 
41  for (const auto &gen : gens)
42  {
43  generators.push_back(gen);
44  }
45 
46  n_generators = generators.size();
47 }
48 
49 template void Processor::register_generators(
50  const Vec<ElPtr> &gens);
51 template void Processor::register_generators(
52  const Vec<ShPtr<GenDict>> &gens);
53 template void Processor::register_generators(
54  const Vec<ShPtr<GenList>> &gens);
55 
56 /* ------------------------------------------------------------------ */
57 
59  const int i)
60 {
61  generators[i]->generate_data();
62  generators[i]->accessed_by_instance_of(
63  abi::__cxa_demangle(typeid(*this).name(), 0, 0, new int()));
64 }
65 
66 /* ------------------------------------------------------------------ */
67 
69  const int i)
70 {
71  generators[i]->finish_using_generated_data();
72 }
73 
74 /* ------------------------------------------------------------------ */
75 
77 {
78  int index;
79 
80  #pragma omp critical (processor)
81  {
82  index = i_generator++;
83  }
84 
85  if (index < n_generators)
86  {
87  use_generator_at(index);
88 
89  run_impl(index);
90 
92 
93  return false;
94  }
95 
96  return true;
97 }
98 
99 /* ------------------------------------------------------------------ */
100 
102 {
103  #pragma omp critical (processor)
104  {
105  i_generator = 0;
106  }
107 
108  for (const auto &g : generators)
109  {
110  g->book_to_generate_data();
111  }
112 }
virtual void finish_using_generator_at(const int i)
Call Generator::finish_using_generated_data of i* th Generator object in generators.
Definition: processor.cpp:68
Vec< ShPtr< Generator > > generators
Definition: processor.h:37
ShPtr< Element > ElPtr
An alias for a shared pointer of Element class.
Definition: element.h:378
virtual void use_generator_at(const int i)
Call Generator::generate_data of i th Generator object in generators.
Definition: processor.cpp:58
void startup()
Startup this Processor object.
Definition: processor.cpp:101
int i_generator
Definition: processor.h:24
virtual bool run()
Run analysis using i th Generator object in generators, where i = i_generator.
Definition: processor.cpp:76
int n_generators
Definition: processor.h:31
virtual void run_impl(const int index)=0
Implementation of analysis using an element of generators.
std::vector< T > Vec
Vec is an alias for vector (same as list in Python).
Definition: std.h:27
void register_generator(const ShPtr< GEN > &gen)
Definition: processor.cpp:16
This file has a definition of Processor class, where an analysis process is programmed.
std::shared_ptr< T > ShPtr
ShPtr is an alias for shared pointer.
Definition: std.h:16
void register_generators(const Vec< ShPtr< GEN >> &gens)
Definition: processor.cpp:36