void history_add(monitor_t *m, desktop_t *d, node_t *n) { if (!record_history) return; history_needle = NULL; history_t *h = make_history(m, d, n); if (history_head == NULL) { history_head = history_tail = h; } else if ((n != NULL && history_tail->loc.node != n) || (n == NULL && d != history_tail->loc.desktop)) { for (history_t *hh = history_tail; hh != NULL; hh = hh->prev) if ((n != NULL && hh->loc.node == n) || (n == NULL && d == hh->loc.desktop)) hh->latest = false; history_tail->next = h; h->prev = history_tail; history_tail = h; } else { free(h); } }
/* Run a simulation in which: * - <meanArrival> clients arrive per hour on average * - <meanDeparture> clients leave per hour on average * - simulation runs for <duration> minutes * And print every relevant information. */ void run_simulation(int meanArrival, int meanDeparture, int duration) { printf("### %d arrivals/hour, %d departures/hour during %d minutes\n\n", meanArrival, meanDeparture, duration); double lambda = (meanArrival / 60.); double mu = (meanDeparture / 60.); queue_t q = mm1_queue(lambda, mu, duration); printf("#### Arrival & Departure times\n\n"); printf("##### Arrival times\n\n"); for(int i = 1; i <= q.arrivalsSize; i ++) { printf("%d. %f minutes\n", i, q.arrivals[i - 1]); } printf("\n"); printf("##### Departure times\n\n"); for(int i = 1; i <= q.departuresSize; i ++) { printf("%d. %f minutes\n", i, q.departures[i - 1]); } printf("\n"); printf("#### Queue evolution\n\n"); history_t h = make_history(&q); printf("```\n"); history_to_csv(&h); printf("```\n\n"); printf("#### Statistics\n\n"); printf(" - Mean clients number: %f\n", mean_clients_number(&h)); printf(" - Mean waiting time: %f\n\n", mean_waiting_time(&q)); }