From 3626f34c9af0cea842a8e86723d3e1a566c4b12b Mon Sep 17 00:00:00 2001 From: Bill Currie Date: Thu, 28 Jun 2012 14:43:29 +0900 Subject: [PATCH] Add entnum to edict_t for faster edict->num. Swiped from fte :) --- include/QF/progs.h | 3 ++- nq/source/sv_progs.c | 1 + qw/source/sv_progs.c | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/include/QF/progs.h b/include/QF/progs.h index d55cd2560..1219f467b 100644 --- a/include/QF/progs.h +++ b/include/QF/progs.h @@ -216,6 +216,7 @@ void PR_BoundsCheck (progs_t *pr, int addr, etype_t type); struct edict_s { qboolean free; + int entnum; ///< number of this entity float freetime; ///< sv.time when the object was freed void *edata; ///< external per-edict data pr_type_t v[1]; ///< fields from progs @@ -254,7 +255,7 @@ void ED_EntityParseFunction (progs_t *pr); #define NEXT_EDICT(p,e) ((edict_t *) ((byte *) e + (p)->pr_edict_size)) #define EDICT_TO_PROG(p,e) ((pr_int_t)(intptr_t)((byte *)(e) - PR_edicts (p))) #define PROG_TO_EDICT(p,e) ((edict_t *) (PR_edicts (p) + (e))) -#define NUM_FOR_BAD_EDICT(p,e) (EDICT_TO_PROG (p, e) / (p)->pr_edict_size) +#define NUM_FOR_BAD_EDICT(p,e) ((e)->entnum) #ifndef PR_PARANOID_PROGS # define EDICT_NUM(p,n) (PROG_TO_EDICT (p, (n) * (p)->pr_edict_size)) # define NUM_FOR_EDICT(p,e) NUM_FOR_BAD_EDICT (p, e) diff --git a/nq/source/sv_progs.c b/nq/source/sv_progs.c index b80ccd0b6..37b915e9c 100644 --- a/nq/source/sv_progs.c +++ b/nq/source/sv_progs.c @@ -508,6 +508,7 @@ SV_LoadProgs (void) // init the data field of the edicts for (i = 0; i < sv.max_edicts; i++) { edict_t *ent = EDICT_NUM (&sv_pr_state, i); + ent->entnum = i; ent->edata = &sv_data[i]; SVdata (ent)->edict = ent; } diff --git a/qw/source/sv_progs.c b/qw/source/sv_progs.c index ded598e93..0dde7a76e 100644 --- a/qw/source/sv_progs.c +++ b/qw/source/sv_progs.c @@ -524,6 +524,7 @@ SV_LoadProgs (void) // init the data field of the edicts for (i = 0; i < MAX_EDICTS; i++) { edict_t *ent = EDICT_NUM (&sv_pr_state, i); + ent->entnum = i; ent->edata = &sv_data[i]; SVdata (ent)->edict = ent; }