* queue.h: Generic vax-like doubly linked list queues
*
* Known contributors to this file:
- *
+ * Markus Armbruster, 2014
*/
#ifndef QUEUE_H
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 *);
* queue.c: Various queue routines (for lists)
*
* Known contributors to this file:
- *
+ * Markus Armbruster, 2014
*/
#include <config.h>
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 *))
* Dave Pare, 1986
* Thomas Ruschak, 1992
* Steve McClure, 1996
- * Markus Armbruster, 2006-2012
+ * Markus Armbruster, 2006-2014
*/
#include <config.h>
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;
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)
{
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) {
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;