GENEIAL  0.2=/
 All Classes Pages
BaseCouplingOperation.hpp
1 #pragma once
2 
3 #include <geneial/namespaces.h>
4 #include <geneial/core/operations/coupling/BaseCouplingOperation.h>
5 
6 #include <algorithm>
7 #include <iterator>
8 
9 geneial_private_namespace(geneial)
10 {
11 geneial_private_namespace(operation)
12 {
13 geneial_private_namespace(coupling)
14 {
15 using ::geneial::population::Population;
16 using ::geneial::operation::crossover::BaseCrossoverOperation;
17 using ::geneial::operation::coupling::BaseCouplingOperation;
18 using ::geneial::operation::selection::BaseSelectionOperation;
19 using ::geneial::population::management::BaseManager;
20 
21 geneial_export_namespace
22 {
23 
24 template<typename FITNESS_TYPE>
25 typename BaseCouplingOperation<FITNESS_TYPE>::offspring_result_set::size_type BaseCouplingOperation<FITNESS_TYPE>::copyUnlessMaximumReached(
26  offspring_result_set &dest,
27  const typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set &input,
28  const typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set::size_type limit) const
29 {
30 
31  typedef typename BaseCrossoverOperation<FITNESS_TYPE>::crossover_result_set children_container;
32 
33  auto backInserter = std::back_inserter(dest);
34 
35  const auto toCopy = std::min<typename children_container::size_type>(input.size(),limit);
36 
37  std::move(input.begin(),input.begin()+toCopy,backInserter);
38 
39  return toCopy;
40 }
41 
42 } /* geneial_export_namespace */
43 } /* private namespace coupling */
44 } /* private namespace operation */
45 } /* private namespace geneial */