
Sorting and deduplicating elements after all items have been registered improves the time complexity of constructing the item list from O(n^2) to O(n log n). On a system with about 4000 menu items, this reduces startup time from about 0.21 seconds to 0.13 seconds.
35 lines
670 B
C
35 lines
670 B
C
#define _POSIX_C_SOURCE 200809L
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "menu.h"
|
|
#include "wayland.h"
|
|
|
|
static void read_items(struct menu *menu) {
|
|
char buf[sizeof menu->input];
|
|
while (fgets(buf, sizeof buf, stdin)) {
|
|
char *p = strchr(buf, '\n');
|
|
if (p) {
|
|
*p = '\0';
|
|
}
|
|
menu_add_item(menu, strdup(buf));
|
|
}
|
|
}
|
|
|
|
static void print_item(struct menu *menu, char *text, bool exit) {
|
|
puts(text);
|
|
fflush(stdout);
|
|
if (exit) {
|
|
menu->exit = true;
|
|
}
|
|
}
|
|
|
|
int main(int argc, char *argv[]) {
|
|
struct menu *menu = menu_create(print_item);
|
|
menu_getopts(menu, argc, argv);
|
|
read_items(menu);
|
|
int status = menu_run(menu);
|
|
menu_destroy(menu);
|
|
return status;
|
|
}
|