static void handle_triggers(struct term_client *client, char *data, size_t length) { struct term_trigger *trigger = NULL; collections_list_traverse_start(client->triggers); while ((trigger = collections_list_traverse_next(client->triggers)) != NULL) { for (int i = 0; i < length; i++) { if (data[i] == trigger->trigger_character) { /* call closure associated with trigger */ trigger->closure.handler(trigger->closure.arg); } } } collections_list_traverse_end(client->triggers); }
static collections_listnode* collections_hash_get_next_valid_bucket(collections_hash_table* t) { collections_listnode* bucket; do { t->cur_bucket_num ++; if (t->cur_bucket_num < t->num_buckets) { if (!t->buckets[t->cur_bucket_num]) { continue; } } else { return NULL; } } while (collections_list_size(t->buckets[t->cur_bucket_num]) <= 0); bucket = t->buckets[t->cur_bucket_num]; collections_list_traverse_start(bucket); return bucket; }