GENEIAL  0.2=/
 All Classes Pages
BaseChromosomeFactory.h
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/population/chromosome/BaseChromosome.h>
5 #include <geneial/core/population/management/BaseManager.h>
6 #include <geneial/core/population/management/ResourcePool.h>
7 #include <geneial/utility/mixins/Buildable.h>
8 
9 geneial_private_namespace(geneial)
10 {
11 geneial_private_namespace(population)
12 {
13 geneial_private_namespace(chromosome)
14 {
15 using ::geneial::population::management::BaseManager;
16 using ::geneial::population::management::ResourcePool;
17 using ::geneial::utility::Buildable;
18 
19 geneial_export_namespace
20 {
21 
22 template<typename FITNESS_TYPE>
23 class BaseChromosomeFactory : public virtual Buildable<BaseChromosomeFactory<FITNESS_TYPE>>
24 {
25 
26 public:
27 
28  enum PopulateBehavior
29  {
30  CREATE_VALUES, LET_UNPOPULATED
31  };
32 
33 
34  virtual ~BaseChromosomeFactory()
35  {
36  }
37 
38  inline typename BaseChromosome<FITNESS_TYPE>::ptr createChromosome(
39  PopulateBehavior populateValues = CREATE_VALUES
40  )
41  {
42  return std::move(doCreateChromosome(populateValues));
43  }
44 
45  class Builder : public Buildable<BaseChromosomeFactory<FITNESS_TYPE>>::Builder
46  {
47  };
48 
49 protected:
50  BaseChromosomeFactory()
51  {
52  }
53 
54  virtual typename BaseChromosome<FITNESS_TYPE>::ptr doCreateChromosome(
55  PopulateBehavior populateValues
56  ) = 0;
57 };
58 
59 } /* geneial_export_namespace */
60 } /* private namespace chromosome */
61 } /* private namespace population */
62 } /* private namespace geneial */