From 1005ffd33c7110f2097f711b6e9e07fbb9ae1d32 Mon Sep 17 00:00:00 2001 From: Sverker Eriksson Date: Wed, 2 May 2018 17:33:28 +0200 Subject: erts: Refactor pseudo deleted ets objects Separate pseudo-deleted-flag from the hash value. --- erts/emulator/beam/erl_db_hash.h | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'erts/emulator/beam/erl_db_hash.h') diff --git a/erts/emulator/beam/erl_db_hash.h b/erts/emulator/beam/erl_db_hash.h index 5f88170ced..127512e1fe 100644 --- a/erts/emulator/beam/erl_db_hash.h +++ b/erts/emulator/beam/erl_db_hash.h @@ -28,9 +28,20 @@ typedef struct fixed_deletion { struct fixed_deletion *next; } FixedDeletion; + +typedef Uint32 HashVal; + typedef struct hash_db_term { struct hash_db_term* next; /* next bucket */ - HashValue hvalue; /* stored hash value */ +#if SIZEOF_VOID_P == 4 + Uint32 hvalue : 31; /* stored hash value */ + Uint32 pseudo_deleted : 1; +# define MAX_HASH_MASK (((Uint32)1 << 31)-1) +#elif SIZEOF_VOID_P == 8 + Uint32 hvalue; + Uint32 pseudo_deleted; +# define MAX_HASH_MASK ((Uint32)(Sint32)-1) +#endif DbTerm dbterm; /* The actual term */ } HashDbTerm; -- cgit v1.2.3