11 #ifndef EMP_FUNCTION_SET_H 12 #define EMP_FUNCTION_SET_H 15 #include "../base/vector.h" 24 template <
typename RETURN_T,
typename... ARGS>
38 size_t GetSize()
const {
return base_t::size(); }
44 void Remove(
size_t pos) { base_t::erase(base_t::begin()+pos); }
48 const size_t num_tests = base_t::size();
49 return_vals.
resize(num_tests);
50 for (
size_t i = 0; i < num_tests; i++) {
51 return_vals[i] = (*this)[i](args...);
58 RETURN_T
Run(ARGS... args, std::function<RETURN_T(RETURN_T, RETURN_T)> comp_fun,
59 RETURN_T default_val=0)
const {
60 if (base_t::size() == 0)
return default_val;
64 RETURN_T best_found = return_vals[0];
65 for (
size_t i = 1; i < return_vals.
size(); i++) {
66 best_found = comp_fun(best_found, return_vals[i]);
73 RETURN_T
FindMax(ARGS... args, RETURN_T default_val=0)
const {
74 return Run(args..., [](
double i1,
double i2){ return std::max(i1,i2); }, default_val);
78 RETURN_T
FindMin(ARGS... args, RETURN_T default_val=0)
const {
79 return Run(args..., [](
double i1,
double i2){ return std::min(i1,i2); }, default_val);
83 RETURN_T
FindSum(ARGS... args, RETURN_T default_val=0)
const {
84 return Run(args..., [](
double i1,
double i2){ return i1 + i2; }, default_val);
88 RETURN_T
FindProduct(ARGS... args, RETURN_T default_val=1)
const {
89 return Run(args..., [](
double i1,
double i2){ return i1 * i2; }, default_val);
95 template <
typename... ARGS>
106 size_t GetSize()
const {
return base_t::size(); }
109 void Add(
const std::function<
void(ARGS...)> & in_fun) { base_t::push_back(in_fun); }
112 void Remove(
size_t pos) { base_t::erase(base_t::begin()+(
int)pos); }
115 void Run(ARGS... args)
const {
116 for (
const std::function<
void(ARGS...)> & cur_fun : *
this) {
size_t GetSize() const
How many functions are in this FunctionSet?
Definition: FunctionSet.h:38
const emp::vector< RETURN_T > & Run(ARGS...args) const
Run all functions and return a vector of all results.
Definition: FunctionSet.h:47
void Remove(size_t pos)
Remove the function at a specified position.
Definition: FunctionSet.h:44
T value_type
Definition: vector.h:136
void Add(const value_type &in_fun)
Add a new funtion to this FunctionSet.
Definition: FunctionSet.h:41
RETURN_T FindProduct(ARGS...args, RETURN_T default_val=1) const
Run all functions and return a product of all values.
Definition: FunctionSet.h:88
typename base_t::value_type value_type
Definition: FunctionSet.h:34
RETURN_T FindMax(ARGS...args, RETURN_T default_val=0) const
Run all functions and return the highest value.
Definition: FunctionSet.h:73
void return_t
Definition: FunctionSet.h:103
size_t size() const
Definition: vector.h:151
RETURN_T FindMin(ARGS...args, RETURN_T default_val=0) const
Run all functions and return the lowest value.
Definition: FunctionSet.h:78
FunctionSet()
Definition: FunctionSet.h:30
~FunctionSet()
Definition: FunctionSet.h:99
void Add(const std::function< void(ARGS...)> &in_fun)
Add a new function to this FunctionSet.
Definition: FunctionSet.h:109
void Run(ARGS...args) const
Run all functions in the FunctionSet.
Definition: FunctionSet.h:115
FunctionSet()
Definition: FunctionSet.h:98
RETURN_T FindSum(ARGS...args, RETURN_T default_val=0) const
Run all functions and return the total value.
Definition: FunctionSet.h:83
size_t GetSize() const
How many functions are in this FunctionSet?
Definition: FunctionSet.h:106
void resize(size_t new_size)
Definition: vector.h:161
typename base_t::value_type value_type
Definition: FunctionSet.h:102
If we are in emscripten, make sure to include the header.
Definition: array.h:37
Definition: FunctionSet.h:19
RETURN_T Run(ARGS...args, std::function< RETURN_T(RETURN_T, RETURN_T)> comp_fun, RETURN_T default_val=0) const
Definition: FunctionSet.h:58
~FunctionSet()
Definition: FunctionSet.h:31
Build a debug wrapper emp::vector around std::vector.
Definition: vector.h:42
RETURN_T return_t
Definition: FunctionSet.h:35
emp::vector< RETURN_T > return_vals
Definition: FunctionSet.h:27
void Remove(size_t pos)
Remove the function at the designated position from this FunctionSet.
Definition: FunctionSet.h:112