Helios++
Helios software for LiDAR simulations
KDTreeFactoryMaker.h
1 #pragma once
2 
3 #include <SimpleKDTreeFactory.h>
4 #include <SimpleKDTreeGeometricStrategy.h>
5 #include <SAHKDTreeFactory.h>
6 #include <SAHKDTreeGeometricStrategy.h>
7 #include <AxisSAHKDTreeFactory.h>
8 #include <AxisSAHKDTreeGeometricStrategy.h>
9 #include <FastSAHKDTreeFactory.h>
10 #include <FastSAHKDTreeGeometricStrategy.h>
11 #include <MultiThreadKDTreeFactory.h>
12 #include <MultiThreadSAHKDTreeFactory.h>
13 
14 #include <memory>
15 
16 using std::shared_ptr;
17 using std::make_shared;
18 
27 private:
28  // *** CONSTRUCTION / DESTRUCTION *** //
29  // ************************************ //
30  KDTreeFactoryMaker() = delete;
31  virtual ~KDTreeFactoryMaker() = default;
32 
33  // *** STATIC ATTRIBUTES : DECLARE *** //
34  // ************************************ //
38  static size_t const sysThreads;
39 
40 
41 public:
42  // *** STATIC MAKE METHODS *** //
43  // ***************************** //
49  static inline shared_ptr<SimpleKDTreeFactory> makeSimple(){
50  return make_shared<SimpleKDTreeFactory>();
51  }
62  static inline shared_ptr<MultiThreadKDTreeFactory> makeSimpleMultiThread(
63  size_t const kdtNodeJobs,
64  size_t const kdtGeomJobs
65  ){
66  shared_ptr<SimpleKDTreeFactory> kdtf = makeSimple();
67  shared_ptr<SimpleKDTreeGeometricStrategy> gs = \
68  make_shared<SimpleKDTreeGeometricStrategy>(*kdtf);
69  return make_shared<MultiThreadKDTreeFactory>(
70  kdtf, gs, kdtNodeJobs, kdtGeomJobs
71  );
72  }
79  static inline shared_ptr<MultiThreadKDTreeFactory> makeSimpleMultiThread(
80  size_t const kdtNodeJobs
81  ){
82  return makeSimpleMultiThread(kdtNodeJobs, kdtNodeJobs);
83  }
91  static inline shared_ptr<MultiThreadKDTreeFactory> makeSimpleMultiThread(){
93  }
94 
102  static inline shared_ptr<SAHKDTreeFactory> makeSAH(size_t const lossNodes){
103  return make_shared<SAHKDTreeFactory>(lossNodes);
104  }
115  static inline shared_ptr<MultiThreadSAHKDTreeFactory> makeSAHMultiThread(
116  size_t const lossNodes,
117  size_t const kdtNodeJobs,
118  size_t const kdtGeomJobs
119  ){
120  shared_ptr<SAHKDTreeFactory> kdtf = makeSAH(lossNodes);
121  shared_ptr<SAHKDTreeGeometricStrategy> gs = \
122  make_shared<SAHKDTreeGeometricStrategy>(*kdtf);
123  return make_shared<MultiThreadSAHKDTreeFactory>(
124  kdtf, gs, kdtNodeJobs, kdtGeomJobs
125  );
126  }
133  static inline shared_ptr<MultiThreadSAHKDTreeFactory> makeSAHMultiThread(
134  size_t const lossNodes,
135  size_t const kdtNodeJobs
136  ){
137  return makeSAHMultiThread(lossNodes, kdtNodeJobs, kdtNodeJobs);
138  }
146  static inline shared_ptr<MultiThreadSAHKDTreeFactory> makeSAHMultiThread(
147  size_t const lossNodes
148  ){
149  return makeSAHMultiThread(lossNodes, sysThreads, sysThreads);
150  }
157  static inline shared_ptr<MultiThreadSAHKDTreeFactory> makeSAHMultiThread(){
159  }
160 
168  static inline shared_ptr<AxisSAHKDTreeFactory> makeAxisSAH(
169  size_t const lossNodes
170  ){
171  return make_shared<AxisSAHKDTreeFactory>(lossNodes);
172  }
183  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
185  size_t const lossNodes,
186  size_t const kdtNodeJobs,
187  size_t const kdtGeomJobs
188  ){
189  shared_ptr<AxisSAHKDTreeFactory> kdtf = makeAxisSAH(lossNodes);
190  shared_ptr<AxisSAHKDTreeGeometricStrategy> gs = \
191  make_shared<AxisSAHKDTreeGeometricStrategy>(*kdtf);
192  return make_shared<MultiThreadSAHKDTreeFactory>(
193  kdtf, gs, kdtNodeJobs, kdtGeomJobs
194  );
195  }
202  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
204  size_t const lossNodes,
205  size_t const kdtNodeJobs
206  ){
207  return makeAxisSAHMultiThread(lossNodes, kdtNodeJobs, kdtNodeJobs);
208  }
216  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
217  makeAxisSAHMultiThread(size_t const lossNodes){
218  return makeAxisSAHMultiThread(lossNodes, sysThreads, sysThreads);
219  }
226  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
229  }
230 
238  static inline shared_ptr<FastSAHKDTreeFactory> makeFastSAH(
239  size_t const lossNodes
240  ){
241  return make_shared<FastSAHKDTreeFactory>(lossNodes);
242  }
253  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
255  size_t const lossNodes,
256  size_t const kdtNodeJobs,
257  size_t const kdtGeomJobs
258  ){
259  shared_ptr<FastSAHKDTreeFactory> kdtf = makeFastSAH(lossNodes);
260  shared_ptr<FastSAHKDTreeGeometricStrategy> gs = \
261  make_shared<FastSAHKDTreeGeometricStrategy>(*kdtf);
262  return make_shared<MultiThreadSAHKDTreeFactory>(
263  kdtf, gs, kdtNodeJobs, kdtGeomJobs
264  );
265  }
272  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
274  size_t const lossNodes,
275  size_t const kdtNodeJobs
276  ){
277  return makeFastSAHMultiThread(lossNodes, kdtNodeJobs, kdtNodeJobs);
278  }
286  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
287  makeFastSAHMultiThread(size_t const lossNodes){
288  return makeFastSAHMultiThread(lossNodes, sysThreads, sysThreads);
289  }
296  static inline shared_ptr<MultiThreadSAHKDTreeFactory>
299  }
300 };
301 
302 // *** STATIC ATTRIBUTES : INITIALIZE *** //
303 // *************************************** //
304 size_t const KDTreeFactoryMaker::sysThreads = \
305  std::thread::hardware_concurrency();
306 
Collection of static methods to simplify making of different KDTree factories.
Definition: KDTreeFactoryMaker.h:26
static shared_ptr< SAHKDTreeFactory > makeSAH(size_t const lossNodes)
Build a SAH KDTree factory.
Definition: KDTreeFactoryMaker.h:102
static shared_ptr< MultiThreadSAHKDTreeFactory > makeFastSAHMultiThread(size_t const lossNodes)
Build a multi-thread fast SAH KDTree factory assuming the number of threads for geometry and node lev...
Definition: KDTreeFactoryMaker.h:287
static shared_ptr< MultiThreadSAHKDTreeFactory > makeSAHMultiThread(size_t const lossNodes, size_t const kdtNodeJobs)
Build a multi-thread SAH KDTree factory assuming the number of threads for geometry-level paralleliza...
Definition: KDTreeFactoryMaker.h:133
static shared_ptr< SimpleKDTreeFactory > makeSimple()
Build a simple KDTree factory.
Definition: KDTreeFactoryMaker.h:49
static shared_ptr< MultiThreadSAHKDTreeFactory > makeFastSAHMultiThread(size_t const lossNodes, size_t const kdtNodeJobs, size_t const kdtGeomJobs)
Build a multi-thread fast SAH KDTree factory.
Definition: KDTreeFactoryMaker.h:254
static shared_ptr< MultiThreadKDTreeFactory > makeSimpleMultiThread(size_t const kdtNodeJobs)
Build a multi-thread simple KDTree factory assuming the number of threads for geometry-level parallel...
Definition: KDTreeFactoryMaker.h:79
static shared_ptr< MultiThreadSAHKDTreeFactory > makeSAHMultiThread()
Build a multi-thread SAH KDTree factory with system threads and default loss nodes.
Definition: KDTreeFactoryMaker.h:157
static size_t const sysThreads
Number of threads available in the system.
Definition: KDTreeFactoryMaker.h:38
static shared_ptr< MultiThreadSAHKDTreeFactory > makeFastSAHMultiThread()
Build a multi-thread fast SAH KDTree factory with system threads and default loss nodes.
Definition: KDTreeFactoryMaker.h:297
static shared_ptr< MultiThreadSAHKDTreeFactory > makeAxisSAHMultiThread(size_t const lossNodes, size_t const kdtNodeJobs)
Build a multi-thread axis SAH KDTree factory assuming the number of threads for geometry-level parall...
Definition: KDTreeFactoryMaker.h:203
static shared_ptr< FastSAHKDTreeFactory > makeFastSAH(size_t const lossNodes)
Build a fast SAH KDTree factory.
Definition: KDTreeFactoryMaker.h:238
static shared_ptr< MultiThreadSAHKDTreeFactory > makeSAHMultiThread(size_t const lossNodes)
Build a multi-thread SAH KDTree factory assuming the number of threads for geometry and node levels p...
Definition: KDTreeFactoryMaker.h:146
static shared_ptr< MultiThreadSAHKDTreeFactory > makeAxisSAHMultiThread()
Build a multi-thread axis SAH KDTree factory with system threads and default loss nodes.
Definition: KDTreeFactoryMaker.h:227
static shared_ptr< MultiThreadSAHKDTreeFactory > makeFastSAHMultiThread(size_t const lossNodes, size_t const kdtNodeJobs)
Build a multi-thread fast SAH KDTree factory assuming the number of threads for geometry-level parall...
Definition: KDTreeFactoryMaker.h:273
static shared_ptr< MultiThreadSAHKDTreeFactory > makeAxisSAHMultiThread(size_t const lossNodes)
Build a multi-thread axis SAH KDTree factory assuming the number of threads for geometry and node lev...
Definition: KDTreeFactoryMaker.h:217
static shared_ptr< AxisSAHKDTreeFactory > makeAxisSAH(size_t const lossNodes)
Build an Axis SAH KDTree factory.
Definition: KDTreeFactoryMaker.h:168
static shared_ptr< MultiThreadKDTreeFactory > makeSimpleMultiThread()
Build a multi-thread simple KDTree factory assuming the number of threads for geometry and node level...
Definition: KDTreeFactoryMaker.h:91
static shared_ptr< MultiThreadSAHKDTreeFactory > makeSAHMultiThread(size_t const lossNodes, size_t const kdtNodeJobs, size_t const kdtGeomJobs)
Build a multi-thread SAH KDTree factory.
Definition: KDTreeFactoryMaker.h:115
static shared_ptr< MultiThreadSAHKDTreeFactory > makeAxisSAHMultiThread(size_t const lossNodes, size_t const kdtNodeJobs, size_t const kdtGeomJobs)
Build a multi-thread axis SAH KDTree factory.
Definition: KDTreeFactoryMaker.h:184
static shared_ptr< MultiThreadKDTreeFactory > makeSimpleMultiThread(size_t const kdtNodeJobs, size_t const kdtGeomJobs)
Build a multi-thread simple KDTree factory.
Definition: KDTreeFactoryMaker.h:62