From a0cf65db77343cf60a72c59596ccfcaebe91c663 Mon Sep 17 00:00:00 2001 From: Nicholas Marriott Date: Fri, 31 May 2013 12:19:34 +0000 Subject: Instead of eating 1024 bytes or so for the arguments of each command, save memory by using an RB tree. From Tiago Cunha. --- tmux.h | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'tmux.h') diff --git a/tmux.h b/tmux.h index 7404b27f..7c577b4d 100644 --- a/tmux.h +++ b/tmux.h @@ -1361,13 +1361,18 @@ struct client { }; ARRAY_DECL(clients, struct client *); -/* Parsed arguments. */ -struct args { - bitstr_t *flags; - char *values[SCHAR_MAX]; /* XXX This is awfully big. */ +/* Parsed arguments structures. */ +struct args_entry { + u_char flag; + char *value; + RB_ENTRY(args_entry) entry; +}; +RB_HEAD(args_tree, args_entry); - int argc; - char **argv; +struct args { + struct args_tree tree; + int argc; + char **argv; }; /* Command and list of commands. */ @@ -1724,6 +1729,8 @@ extern const char clock_table[14][5][5]; void clock_draw(struct screen_write_ctx *, int, int); /* arguments.c */ +int args_cmp(struct args_entry *, struct args_entry *); +RB_PROTOTYPE(args_tree, args_entry, entry, args_cmp); struct args *args_create(int, ...); struct args *args_parse(const char *, int, char **); void args_free(struct args *); -- cgit