gdb: turn gdb::bcache's function pointers into virtual methods

The two function pointers optionally passed to gdb::bcache are very good
candidates to be turned into virtual methods, this patch does that in
the most straightforward / unsurprising way.

gdb/ChangeLog:

	* bcache.h (struct bcache) <bcache>: Remove constructor.
	<m_hash_function, m_compare_function>: Remove.
	<~bcache>: Make virtual.
	<compare>: Remove static method, introduce virtual method.
	<default_hash>: Remove.
	<hash>: New virtual method.
	* bcache.c (bcache::expand_hash_table): Update.
	(bcache::insert): Update.
	(bcache::hash): New.
	(bcache::compare): Update comment and parameter names.
	* gdbtypes.c (types_deeply_equal): Update.
	* psymtab.h (struct psymbol_bcache): New struct.
	(class psymtab_storage) <psymtab_storage>: Make default.
	<psymbol_cache>: Change type to psymbol_bcache.
	* psymtab.c (psymtab_storage::psymtab_storage): Remove.
	(psymbol_hash): Change to...
	(psymbol_bcache::hash): ... this.
	(psymbol_compare): Change to...
	(psymbol_bcache::compare): ... this.

Change-Id: I41d578e61de8ac1163461a28fbd220d1f855e372
This commit is contained in:
Simon Marchi
2020-09-14 14:02:30 -04:00
committed by Simon Marchi
parent 2ddc8f011a
commit 8980662640
6 changed files with 72 additions and 63 deletions

View File

@@ -142,21 +142,7 @@ struct bstring;
struct bcache
{
/* Allocate a bcache. HASH_FN and COMPARE_FN can be used to pass in
custom hash, and compare functions to be used by this bcache. If
HASH_FUNCTION is NULL fast_hash() is used and if COMPARE_FUNCTION is
NULL memcmp() is used. */
explicit bcache (unsigned long (*hash_fn)(const void *,
int length) = nullptr,
int (*compare_fn)(const void *, const void *,
int length) = nullptr)
: m_hash_function (hash_fn == nullptr ? default_hash : hash_fn),
m_compare_function (compare_fn == nullptr ? compare : compare_fn)
{
}
~bcache ();
virtual ~bcache ();
/* Find a copy of the LENGTH bytes at ADDR in BCACHE. If BCACHE has
never seen those bytes before, add a copy of them to BCACHE. In
@@ -175,6 +161,16 @@ struct bcache
void print_statistics (const char *type);
int memory_used ();
protected:
/* Hash function to be used for this bcache object. Defaults to
fast_hash. */
virtual unsigned long hash (const void *addr, int length);
/* Compare function to be used for this bcache object. Defaults to
memcmp. */
virtual int compare (const void *left, const void *right, int length);
private:
/* All the bstrings are allocated here. */
@@ -205,21 +201,6 @@ private:
length/data compare missed. */
unsigned long m_half_hash_miss_count = 0;
/* Hash function to be used for this bcache object. */
unsigned long (*m_hash_function)(const void *addr, int length);
/* Compare function to be used for this bcache object. */
int (*m_compare_function)(const void *, const void *, int length);
/* Default compare function. */
static int compare (const void *addr1, const void *addr2, int length);
/* Default hash function. */
static unsigned long default_hash (const void *ptr, int length)
{
return fast_hash (ptr, length, 0);
}
/* Expand the hash table. */
void expand_hash_table ();
};