From 4f83ce27b40fec8d13e91b47f48d0434494667d0 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Sun, 28 Dec 2014 21:38:13 +0100 Subject: [PATCH] gen: New emp_quelen(), replacing open-coded counting loops Signed-off-by: Markus Armbruster --- include/queue.h | 3 ++- src/lib/gen/queue.c | 13 ++++++++++++- src/lib/subs/aircombat.c | 8 ++------ src/lib/subs/lndsub.c | 18 ++---------------- 4 files changed, 18 insertions(+), 24 deletions(-) diff --git a/include/queue.h b/include/queue.h index ae2eca54..9e6dcb99 100644 --- a/include/queue.h +++ b/include/queue.h @@ -27,7 +27,7 @@ * queue.h: Generic vax-like doubly linked list queues * * Known contributors to this file: - * + * Markus Armbruster, 2014 */ #ifndef QUEUE_H @@ -42,6 +42,7 @@ struct emp_qelem { extern void emp_remque(struct emp_qelem *); extern void emp_initque(struct emp_qelem *); +extern int emp_quelen(struct emp_qelem *); extern struct emp_qelem *emp_searchque(struct emp_qelem *, void *, int (*)(struct emp_qelem *, void *)); extern void emp_insque(struct emp_qelem *, struct emp_qelem *); diff --git a/src/lib/gen/queue.c b/src/lib/gen/queue.c index be4e9a04..ae55227c 100644 --- a/src/lib/gen/queue.c +++ b/src/lib/gen/queue.c @@ -27,7 +27,7 @@ * queue.c: Various queue routines (for lists) * * Known contributors to this file: - * + * Markus Armbruster, 2014 */ #include @@ -58,6 +58,17 @@ emp_remque(struct emp_qelem *elem) elem->q_back->q_forw = elem->q_forw; } +int +emp_quelen(struct emp_qelem *queue) +{ + struct emp_qelem *qp; + int len; + + for (qp = queue->q_forw, len = 0; qp != queue; qp = qp->q_forw, len++) + ; + return len; +} + struct emp_qelem * emp_searchque(struct emp_qelem *queue, void *key, int (*test)(struct emp_qelem *, void *)) diff --git a/src/lib/subs/aircombat.c b/src/lib/subs/aircombat.c index a1c22fe8..2a76a241 100644 --- a/src/lib/subs/aircombat.c +++ b/src/lib/subs/aircombat.c @@ -30,7 +30,7 @@ * Dave Pare, 1986 * Thomas Ruschak, 1992 * Steve McClure, 1996 - * Markus Armbruster, 2006-2012 + * Markus Armbruster, 2006-2014 */ #include @@ -314,11 +314,7 @@ ac_intercept(struct emp_qelem *bomb_list, struct emp_qelem *esc_list, sam_intercept(esc_list, def_list, def_own, plane_owner, x, y, only_mission); - att_count = 0; - for (qp = bomb_list->q_forw; qp != bomb_list; qp = qp->q_forw) - att_count++; - for (qp = esc_list->q_forw; qp != esc_list; qp = qp->q_forw) - att_count++; + att_count = emp_quelen(bomb_list) + emp_quelen(esc_list); if (!att_count) return; diff --git a/src/lib/subs/lndsub.c b/src/lib/subs/lndsub.c index 677022a5..276050d7 100644 --- a/src/lib/subs/lndsub.c +++ b/src/lib/subs/lndsub.c @@ -719,20 +719,6 @@ lnd_check_mar(struct lndstr *lp, struct sctstr *sectp) return LND_STUCK_NOT; } -static int -lnd_count(struct emp_qelem *list) -{ - struct emp_qelem *qp; - struct emp_qelem *next; - int count = 0; - - for (qp = list->q_back; qp != list; qp = next) { - next = qp->q_back; - ++count; - } - return count; -} - static int lnd_damage(struct emp_qelem *list, int totdam) { @@ -742,7 +728,7 @@ lnd_damage(struct emp_qelem *list, int totdam) int dam; int count; - if (!totdam || !(count = lnd_count(list))) + if (!totdam || !(count = emp_quelen(list))) return 0; dam = ldround((double)totdam / count, 1); for (qp = list->q_back; qp != list; qp = next) { @@ -785,7 +771,7 @@ static int lnd_missile_interdiction(struct emp_qelem *list, coord newx, coord newy, natid victim) { - int mindam = lnd_count(list) * 20; + int mindam = emp_quelen(list) * 20; int hardtarget = lnd_easiest_target(list); int dam, newdam, sublaunch; int stopping = 0;