mirror of
https://github.com/DarkPlacesEngine/gmqcc.git
synced 2024-11-23 20:33:05 +00:00
Some cleanups
This commit is contained in:
parent
564cac859a
commit
ee42d2a570
2 changed files with 39 additions and 50 deletions
17
gmqcc.h
17
gmqcc.h
|
@ -291,29 +291,12 @@ GMQCC_IND_STRING(GMQCC_VERSION_PATCH) \
|
|||
/*===================================================================*/
|
||||
/*=========================== stat.c ================================*/
|
||||
/*===================================================================*/
|
||||
typedef struct {
|
||||
size_t key;
|
||||
size_t value;
|
||||
} stat_size_entry_t, **stat_size_table_t;
|
||||
|
||||
void stat_info();
|
||||
|
||||
char *stat_mem_strdup (const char *, size_t, const char *, bool);
|
||||
void *stat_mem_reallocate(void *, size_t, size_t, const char *);
|
||||
void stat_mem_deallocate(void *);
|
||||
void *stat_mem_allocate (size_t, size_t, const char *);
|
||||
|
||||
stat_size_table_t stat_size_new();
|
||||
stat_size_entry_t *stat_size_get(stat_size_table_t, size_t);
|
||||
void stat_size_del(stat_size_table_t);
|
||||
void stat_size_put(stat_size_table_t, size_t, size_t);
|
||||
|
||||
/* getters for hashtable: */
|
||||
stat_size_table_t *stat_size_hashtables_get();
|
||||
uint64_t *stat_type_hashtables_get();
|
||||
uint64_t *stat_used_hashtables_get();
|
||||
stat_size_table_t *stat_hashtables_init();
|
||||
|
||||
#define mem_a(SIZE) stat_mem_allocate ((SIZE), __LINE__, __FILE__)
|
||||
#define mem_d(PTRN) stat_mem_deallocate((void*)(PTRN))
|
||||
#define mem_r(PTRN, SIZE) stat_mem_reallocate((void*)(PTRN), (SIZE), __LINE__, __FILE__)
|
||||
|
|
72
stat.c
72
stat.c
|
@ -17,6 +17,11 @@ typedef struct stat_mem_block_s {
|
|||
struct stat_mem_block_s *prev;
|
||||
} stat_mem_block_t;
|
||||
|
||||
typedef struct {
|
||||
size_t key;
|
||||
size_t value;
|
||||
} stat_size_entry_t, **stat_size_table_t;
|
||||
|
||||
static uint64_t stat_mem_allocated = 0;
|
||||
static uint64_t stat_mem_deallocated = 0;
|
||||
static uint64_t stat_mem_allocated_total = 0;
|
||||
|
@ -32,6 +37,40 @@ static stat_size_table_t stat_size_vectors = NULL;
|
|||
static stat_size_table_t stat_size_hashtables = NULL;
|
||||
static stat_mem_block_t *stat_mem_block_root = NULL;
|
||||
|
||||
|
||||
/*
|
||||
* A tiny size_t key-value hashtbale for tracking vector and hashtable
|
||||
* sizes. We can use it for other things too, if we need to. This is
|
||||
* very TIGHT, and efficent in terms of space though.
|
||||
*/
|
||||
static stat_size_table_t stat_size_new() {
|
||||
return (stat_size_table_t)memset(
|
||||
mem_a(sizeof(stat_size_entry_t*) * ST_SIZE),
|
||||
0, ST_SIZE * sizeof(stat_size_entry_t*)
|
||||
);
|
||||
}
|
||||
|
||||
static void stat_size_del(stat_size_table_t table) {
|
||||
size_t i = 0;
|
||||
for (; i < ST_SIZE; i++) if(table[i]) mem_d(table[i]);
|
||||
mem_d(table);
|
||||
}
|
||||
|
||||
static stat_size_entry_t *stat_size_get(stat_size_table_t table, size_t key) {
|
||||
size_t hash = (key % ST_SIZE);
|
||||
while (table[hash] && table[hash]->key != key)
|
||||
hash = (hash + 1) % ST_SIZE;
|
||||
return table[hash];
|
||||
}
|
||||
static void stat_size_put(stat_size_table_t table, size_t key, size_t value) {
|
||||
size_t hash = (key % ST_SIZE);
|
||||
while (table[hash] && table[hash]->key != key)
|
||||
hash = (hash + 1) % ST_SIZE;
|
||||
table[hash] = (stat_size_entry_t*)mem_a(sizeof(stat_size_entry_t));
|
||||
table[hash]->key = key;
|
||||
table[hash]->value = value;
|
||||
}
|
||||
|
||||
/*
|
||||
* A basic header of information wrapper allocator. Simply stores
|
||||
* information as a header, returns the memory + 1 past it, can be
|
||||
|
@ -431,39 +470,6 @@ void util_htdel(hash_table_t *ht) {
|
|||
util_htrem(ht, NULL);
|
||||
}
|
||||
|
||||
/*
|
||||
* A tiny size_t key-value hashtbale for tracking vector and hashtable
|
||||
* sizes. We can use it for other things too, if we need to. This is
|
||||
* very TIGHT, and efficent in terms of space though.
|
||||
*/
|
||||
stat_size_table_t stat_size_new() {
|
||||
return (stat_size_table_t)memset(
|
||||
mem_a(sizeof(stat_size_entry_t*) * ST_SIZE),
|
||||
0, ST_SIZE * sizeof(stat_size_entry_t*)
|
||||
);
|
||||
}
|
||||
|
||||
void stat_size_del(stat_size_table_t table) {
|
||||
size_t i = 0;
|
||||
for (; i < ST_SIZE; i++) if(table[i]) mem_d(table[i]);
|
||||
mem_d(table);
|
||||
}
|
||||
|
||||
stat_size_entry_t *stat_size_get(stat_size_table_t table, size_t key) {
|
||||
size_t hash = (key % ST_SIZE);
|
||||
while (table[hash] && table[hash]->key != key)
|
||||
hash = (hash + 1) % ST_SIZE;
|
||||
return table[hash];
|
||||
}
|
||||
void stat_size_put(stat_size_table_t table, size_t key, size_t value) {
|
||||
size_t hash = (key % ST_SIZE);
|
||||
while (table[hash] && table[hash]->key != key)
|
||||
hash = (hash + 1) % ST_SIZE;
|
||||
table[hash] = (stat_size_entry_t*)mem_a(sizeof(stat_size_entry_t));
|
||||
table[hash]->key = key;
|
||||
table[hash]->value = value;
|
||||
}
|
||||
|
||||
/*
|
||||
* The following functions below implement printing / dumping of statistical
|
||||
* information.
|
||||
|
|
Loading…
Reference in a new issue