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}
29 const std::string name;
30 const std::function<void()>
init;
50inline std::function<selector_t>
select(
size_t n) {
63inline std::function<selector_t>
random(
size_t a,
size_t b) {
65 if(b < a)
return (
size_t) 0;
67 return a + ((size_t) rand()) % (b - a);
77inline std::function<selector_t>
random(
size_t n) {
88template<
size_t FLAG = NO_
SELECTION_INDEX>
89inline std::function<selector_t>
skippable(std::function<selector_t> selector) {
102inline 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) {
103 if(!selector)
return [=]() {
return fallback; };
105 std::function<selector_t> selector;
110 uint64_t thread_start = timer.systemHighResolution();
113 vex::thread sThread([](
void* args) {
114 ((thread_args*) args)->output = ((thread_args*) args)->selector();
117 while(sThread.joinable()) {
118 if(timer.systemHighResolution() - thread_start > microsec) sThread.interrupt();
130 }
else return targs.output;
140inline std::function<selector_t>
delayed(std::function<selector_t> selector,
unsigned int ms) {
157 double region = 100.0 / initializations;
159 return (
size_t) ((angle < 100) ? angle : 99.9) / region;
173 size_t total_weights = 0;
174 for(
Initialization initialization : initializations) total_weights += initialization.meta;
176 size_t angle = (
potentiometer.value(vex::percentUnits::pct)/100.0)*total_weights;
177 for(
int i = initializations.size()-1; i > 0; i--) {
178 if(initializations.at(i).meta == 0)
continue;
180 total_weights -= initializations.at(i).meta;
181 if(angle >= total_weights)
return i;
211 std::function<
void()> pre_init =
nullptr, std::function<
void()> post_init =
nullptr);
254 std::function<Selector::selector_t> selector;
255 std::vector<Initialization> initialization_list;
257 std::function<void()> pre_init;
258 std::function<void()> post_init;
262 bool initialized =
false;
const std::string selected_name() const
Definition initializer.cpp:56
const std::size_t initialization_count() const
Definition initializer.cpp:48
bool uninitialized() const
Definition initializer.cpp:80
const std::vector< Initialization > & initializations() const
Definition initializer.cpp:40
unsigned int selected_index() const
Definition initializer.cpp:72
unsigned int selected_meta() const
Definition initializer.cpp:64
Initializer(std::function< void()> initialize)
Definition initializer.cpp:8
void initialize()
Initializes the robot.
Definition initializer.cpp:23
A namespace containing predefined selector functions and wrappers that can be passed to an Initialize...
Definition initializer.h:37
std::function< selector_t > weighted_potentiometer(vex::pot &potentiometer, std::vector< Initialization > &initializations)
Definition initializer.h:170
std::function< selector_t > select(size_t n)
Definition initializer.h:50
size_t() selector_t
The type of an Initializer's Selector function.
Definition initializer.h:40
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:102
std::function< selector_t > skippable(std::function< selector_t > selector)
Definition initializer.h:89
std::function< selector_t > delayed(std::function< selector_t > selector, unsigned int ms)
Definition initializer.h:140
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:43
std::function< selector_t > potentiometer(vex::pot &potentiometer, const size_t &initializations)
Definition initializer.h:154
std::function< selector_t > random(size_t a, size_t b)
Definition initializer.h:63
Initialization is a helper structure of the Initializer class used to group an initialization functio...
Definition initializer.h:28
const unsigned int meta
The function that executes when this Initialization is selected.
Definition initializer.h:31
const std::function< void()> init
The name of the Initialization.
Definition initializer.h:30