#ifndef QUEUE_H_SENTRY #define QUEUE_H_SENTRY #define MAKE_QUEUE_INIT(NAME) \ void NAME ## _init(struct NAME *q) \ { \ q->first = NULL; \ q->last = NULL; \ } #define MAKE_QUEUE_PUSH(NAME, VALUE, TYPE) \ void NAME ## _push(struct NAME *q, TYPE VALUE) \ { \ struct VALUE ## _item *tmp = malloc(sizeof(struct VALUE ## _item)); \ tmp-> VALUE = VALUE; \ tmp->next = NULL; \ if(!q->first) { \ q->first = tmp; \ q->last = q->first; \ } else { \ q->last->next = tmp; \ q->last = q->last->next; \ } \ } struct word_item { char *word; struct word_item *next; }; struct cmdline_item { char **cmdline; struct cmdline_item *next; }; struct pid_item { int pid; struct pid_item *next; }; struct w_queue { struct word_item *first; struct word_item *last; }; struct c_queue { struct cmdline_item *first; struct cmdline_item *last; struct cmdline_item *last_extracted_item; }; struct p_queue { struct pid_item *first; struct pid_item *last; }; void w_queue_clear(struct w_queue *q); int w_queue_get_word_count(const struct w_queue *q); void w_queue_copy_words_to_args(const struct w_queue *q, char **cmdline); void c_queue_init(struct c_queue *q); void c_queue_push(struct c_queue *q, char **cmdline); char** c_queue_pop(struct c_queue *q); void c_queue_clear(struct c_queue *q); int c_queue_is_empty(struct c_queue *q); int p_queue_find_pid(struct p_queue *q, int pid); void p_queue_clear(struct p_queue *q); int p_queue_get_process_quantity(struct p_queue *q); #endif