9#define INIT(name, func, meta) Initialization{name, func, meta}
12#define FUNC_INIT(func) Initialization{"", func, 1}
15#define WEIGHTED_INIT(func, weight) Initialization{"", func, weight}
18#define RED_INIT(name, func) Initialization{name, func, ClrRed }
21#define BLUE_INIT(name, func) Initialization{name, func, ClrBlue}
24#define NEUTRAL_INIT(name, func) Initialization{name, func, ClrGray}
30 const std::string name;
31 const std::function<void()>
init;
52inline std::function<selector_t>
select(
size_t n) {
65inline std::function<selector_t>
random(
size_t a,
size_t b) {
67 if(b < a)
return (
size_t) 0;
69 return a + ((size_t) rand()) % (b - a);
79inline std::function<selector_t>
random(
size_t n) {
90template<
size_t FLAG = NO_
SELECTION_INDEX>
91inline std::function<selector_t>
skippable(std::function<selector_t> selector) {
104inline std::function<selector_t>
timeout(std::function<selector_t> selector, uint64_t microsec,
unsigned int fallback =
NO_SELECTION_INDEX, std::function<
void(
size_t)> cancel =
nullptr) {
105 if(!selector)
return [=]() {
return fallback; };
107 std::function<selector_t> selector;
112 uint64_t thread_start = timer.systemHighResolution();
115 vex::thread sThread([](
void* args) {
116 ((thread_args*) args)->output = ((thread_args*) args)->selector();
119 while(sThread.joinable()) {
120 if(timer.systemHighResolution() - thread_start > microsec) sThread.interrupt();
132 }
else return targs.output;
142inline std::function<selector_t>
delayed(std::function<selector_t> selector,
unsigned int ms) {
159 double region = 100.0 / initializations;
161 return (
size_t) ((angle < 100) ? angle : 99.9) / region;
175 size_t total_weights = 0;
176 for(
Initialization initialization : initializations) total_weights += initialization.meta;
178 size_t angle = (
potentiometer.value(vex::percentUnits::pct)/100.0)*total_weights;
179 for(
int i = initializations.size()-1; i > 0; i--) {
180 if(initializations.at(i).meta == 0)
continue;
182 total_weights -= initializations.at(i).meta;
183 if(angle >= total_weights)
return i;
211 std::function<
void()> pre_init =
nullptr, std::function<
void()> post_init =
nullptr);
255 std::function<Selector::selector_t> selector;
256 std::vector<Initialization> initialization_list;
258 std::function<void()> pre_init;
259 std::function<void()> post_init;
263 bool initialized =
false;
const std::string selected_name() const
Definition initializer.cpp:58
const std::size_t initialization_count() const
Definition initializer.cpp:50
bool uninitialized() const
Definition initializer.cpp:82
const std::vector< Initialization > & initializations() const
Definition initializer.cpp:42
unsigned int selected_index() const
Definition initializer.cpp:74
unsigned int selected_meta() const
Definition initializer.cpp:66
Initializer(std::function< void()> initialize)
Definition initializer.cpp:8
void initialize()
Definition initializer.cpp:25
Definition initializer.h:39
std::function< selector_t > weighted_potentiometer(vex::pot &potentiometer, std::vector< Initialization > &initializations)
Definition initializer.h:172
std::function< selector_t > select(size_t n)
Definition initializer.h:52
size_t() selector_t
The type of an Initializer's Selector function.
Definition initializer.h:42
std::function< selector_t > timeout(std::function< selector_t > selector, uint64_t microsec, unsigned int fallback=NO_SELECTION_INDEX, std::function< void(size_t)> cancel=nullptr)
Definition initializer.h:104
std::function< selector_t > skippable(std::function< selector_t > selector)
Definition initializer.h:91
std::function< selector_t > delayed(std::function< selector_t > selector, unsigned int ms)
Definition initializer.h:142
constexpr size_t NO_SELECTION_INDEX
A constant index that is used in selector functions to represent when a selection has not yet been ma...
Definition initializer.h:45
std::function< selector_t > potentiometer(vex::pot &potentiometer, const size_t &initializations)
Definition initializer.h:156
std::function< selector_t > random(size_t a, size_t b)
Definition initializer.h:65
Definition initializer.h:29
const unsigned int meta
The function that executes when this Initialization is selected.
Definition initializer.h:32
const std::function< void()> init
The name of the Initialization.
Definition initializer.h:31