8238863: Refactor out static initialization from Dict constructors
Reviewed-by: neliasso, dlong
This commit is contained in:
parent
945e42212d
commit
b4b8ead78b
@ -35,9 +35,13 @@
|
|||||||
//------------------------------data-----------------------------------------
|
//------------------------------data-----------------------------------------
|
||||||
// String hash tables
|
// String hash tables
|
||||||
#define MAXID 20
|
#define MAXID 20
|
||||||
static uint8_t initflag = 0; // True after 1st initialization
|
|
||||||
static const char shft[MAXID] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6};
|
static const char shft[MAXID] = {1,2,3,4,5,6,7,1,2,3,4,5,6,7,1,2,3,4,5,6};
|
||||||
static short xsum[MAXID];
|
// Precomputed table of null character hashes
|
||||||
|
// xsum[0] = (1 << shft[0]) + 1;
|
||||||
|
// for(int i = 1; i < MAXID; i++) {
|
||||||
|
// xsum[i] = (1 << shft[i]) + 1 + xsum[i - 1];
|
||||||
|
// }
|
||||||
|
static const short xsum[MAXID] = {3,8,17,34,67,132,261,264,269,278,295,328,393,522,525,530,539,556,589,654};
|
||||||
|
|
||||||
//------------------------------bucket---------------------------------------
|
//------------------------------bucket---------------------------------------
|
||||||
class bucket : public ResourceObj {
|
class bucket : public ResourceObj {
|
||||||
@ -57,16 +61,6 @@ public:
|
|||||||
// doubling in size costs no more than a constant factor in speed.
|
// doubling in size costs no more than a constant factor in speed.
|
||||||
Dict::Dict(CmpKey initcmp, Hash inithash) : _arena(Thread::current()->resource_area()),
|
Dict::Dict(CmpKey initcmp, Hash inithash) : _arena(Thread::current()->resource_area()),
|
||||||
_hash(inithash), _cmp(initcmp) {
|
_hash(inithash), _cmp(initcmp) {
|
||||||
int i;
|
|
||||||
|
|
||||||
// Precompute table of null character hashes
|
|
||||||
if( !initflag ) { // Not initializated yet?
|
|
||||||
xsum[0] = (1<<shft[0])+1; // Initialize
|
|
||||||
for(i=1; i<MAXID; i++) {
|
|
||||||
xsum[i] = (1<<shft[i])+1+xsum[i-1];
|
|
||||||
}
|
|
||||||
initflag = 1; // Never again
|
|
||||||
}
|
|
||||||
|
|
||||||
_size = 16; // Size is a power of 2
|
_size = 16; // Size is a power of 2
|
||||||
_cnt = 0; // Dictionary is empty
|
_cnt = 0; // Dictionary is empty
|
||||||
@ -76,19 +70,9 @@ Dict::Dict(CmpKey initcmp, Hash inithash) : _arena(Thread::current()->resource_a
|
|||||||
|
|
||||||
Dict::Dict(CmpKey initcmp, Hash inithash, Arena *arena, int size)
|
Dict::Dict(CmpKey initcmp, Hash inithash, Arena *arena, int size)
|
||||||
: _arena(arena), _hash(inithash), _cmp(initcmp) {
|
: _arena(arena), _hash(inithash), _cmp(initcmp) {
|
||||||
int i;
|
// Size is a power of 2
|
||||||
|
_size = MAX2(16, round_up_power_of_2(size));
|
||||||
|
|
||||||
// Precompute table of null character hashes
|
|
||||||
if( !initflag ) { // Not initializated yet?
|
|
||||||
xsum[0] = (1<<shft[0])+1; // Initialize
|
|
||||||
for(i=1; i<MAXID; i++) {
|
|
||||||
xsum[i] = (1<<shft[i])+1+xsum[i-1];
|
|
||||||
}
|
|
||||||
initflag = 1; // Never again
|
|
||||||
}
|
|
||||||
|
|
||||||
i = MAX2(16, round_up_power_of_2(size));
|
|
||||||
_size = i; // Size is a power of 2
|
|
||||||
_cnt = 0; // Dictionary is empty
|
_cnt = 0; // Dictionary is empty
|
||||||
_bin = (bucket*)_arena->Amalloc_4(sizeof(bucket)*_size);
|
_bin = (bucket*)_arena->Amalloc_4(sizeof(bucket)*_size);
|
||||||
memset((void*)_bin,0,sizeof(bucket)*_size);
|
memset((void*)_bin,0,sizeof(bucket)*_size);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user