}
// Order, de-dupe and add instructions to the end of program.
- sort(begin(infix_program), end(infix_program),
- [](const RoseInstrTriggerInfix &a, const RoseInstrTriggerInfix &b) {
- return tie(a.cancel, a.queue, a.event) <
- tie(b.cancel, b.queue, b.event);
- });
- infix_program.erase(unique(begin(infix_program), end(infix_program)),
- end(infix_program));
+ sort_and_unique(infix_program, [](const RoseInstrTriggerInfix &a,
+ const RoseInstrTriggerInfix &b) {
+ return tie(a.cancel, a.queue, a.event) <
+ tie(b.cancel, b.queue, b.event);
+ });
for (const auto &ri : infix_program) {
program.add_before_end(make_unique<RoseInstrTriggerInfix>(ri));
}
}
}
- sort(begin(delay_instructions), end(delay_instructions),
- [](const RoseInstrPushDelayed &a, const RoseInstrPushDelayed &b) {
- return tie(a.delay, a.index) < tie(b.delay, b.index);
- });
- delay_instructions.erase(
- unique(begin(delay_instructions), end(delay_instructions)),
- end(delay_instructions));
+ sort_and_unique(delay_instructions, [](const RoseInstrPushDelayed &a,
+ const RoseInstrPushDelayed &b) {
+ return tie(a.delay, a.index) < tie(b.delay, b.index);
+ });
for (const auto &ri : delay_instructions) {
program.add_before_end(make_unique<RoseInstrPushDelayed>(ri));
}
/** \brief Sort a sequence container and remove duplicates. */
-template <typename C>
-void sort_and_unique(C &container) {
- std::sort(std::begin(container), std::end(container));
+template <typename C, typename Compare = std::less<typename C::value_type>>
+void sort_and_unique(C &container, Compare comp = Compare()) {
+ std::sort(std::begin(container), std::end(container), comp);
container.erase(std::unique(std::begin(container), std::end(container)),
std::end(container));
}