diff options
author | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2022-05-25 22:03:59 -0700 |
---|---|---|
committer | David Vazgenovich Shakaryan <dvshakaryan@gmail.com> | 2022-05-25 22:03:59 -0700 |
commit | 656be88ba3b0db383101449d7d2f09348601d7d7 (patch) | |
tree | 03528a96c46ca067372eacb2c9281ed019114063 | |
parent | aff81beab2bb507a9d421f7e4765dbac4a28b0df (diff) | |
download | dartboat-656be88ba3b0db383101449d7d2f09348601d7d7.tar.gz dartboat-656be88ba3b0db383101449d7d2f09348601d7d7.tar.xz |
handle visits memory entirely from match file
-rw-r--r-- | comp.c | 4 | ||||
-rw-r--r-- | dartboat.c | 4 | ||||
-rw-r--r-- | match.c | 13 | ||||
-rw-r--r-- | match.h | 2 |
4 files changed, 12 insertions, 11 deletions
@@ -78,9 +78,7 @@ struct segment next_dart(int rem, int darts_in_hand) void comp_visit(struct leg *l) { - if (l->n_visits == l->size_visits) - leg_grow_visits(l); - struct visit *v = l->visits + l->n_visits++; + struct visit *v = leg_visit(l); v->darts = calloc(3, sizeof(*v->darts)); v->ccoords = calloc(3, sizeof(*v->ccoords)); @@ -33,9 +33,7 @@ void test_match(int start_points) void user_visit(struct leg *l, char *name) { - if (l->n_visits == l->size_visits) - leg_grow_visits(l); - struct visit *v = l->visits + l->n_visits++; + struct visit *v = leg_visit(l); char status[100]; int len = sprintf(status, " %s has %d remaining", name, l->rem); @@ -29,7 +29,7 @@ void leg_free(struct leg *l) free(l); } -void leg_grow_visits(struct leg *l) +static void leg_grow_visits(struct leg *l) { size_t bytes = l->size_visits * sizeof(*l->visits); l->size_visits *= 2; @@ -37,6 +37,13 @@ void leg_grow_visits(struct leg *l) memset((char *)l->visits + bytes, 0, bytes); } +struct visit *leg_visit(struct leg *l) +{ + if (l->n_visits == l->size_visits) + leg_grow_visits(l); + return l->visits + l->n_visits++; +} + void leg_undo_visit(struct leg *l) { l->rem += l->visits[--l->n_visits].points; @@ -81,9 +88,7 @@ struct visit *leg_pts_visit(struct leg *l, int pts) if (l->undone_visits) leg_clear_first_undone(l); - if (l->n_visits == l->size_visits) - leg_grow_visits(l); - struct visit *v = l->visits + l->n_visits++; + struct visit *v = leg_visit(l); v->points = pts; l->rem -= pts; v->rem = l->rem; @@ -39,8 +39,8 @@ struct match { struct leg *leg_init(int pts); void leg_free(struct leg *l); -void leg_grow_visits(struct leg *l); +struct visit *leg_visit(struct leg *l); void leg_undo_visit(struct leg *l); struct visit *leg_redo_visit(struct leg *l); struct visit *leg_comp_visit(struct leg *l, bool redo_undone); |