- Applied Rayce's suggestion to improve the script hash size usage. eA now uses a hash of 1024.
- The str hash report can be printed by turning on the etc_log git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@9577 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
cd14e36a68
commit
74e263086a
@ -4,6 +4,8 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
|||||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||||
|
|
||||||
2006/12/27
|
2006/12/27
|
||||||
|
* Applied Rayce's suggestion to improve the script hash size usage. eA now
|
||||||
|
uses a hash of 1024.
|
||||||
* Full Buster's auto-blind chance is now reducable by stats/items.
|
* Full Buster's auto-blind chance is now reducable by stats/items.
|
||||||
2006/12/26
|
2006/12/26
|
||||||
* Updated Charge Attack's damage equation as per the only source I've seen
|
* Updated Charge Attack's damage equation as per the only source I've seen
|
||||||
|
@ -78,7 +78,8 @@ static struct str_data_struct {
|
|||||||
int next;
|
int next;
|
||||||
} *str_data = NULL;
|
} *str_data = NULL;
|
||||||
int str_num=LABEL_START,str_data_size;
|
int str_num=LABEL_START,str_data_size;
|
||||||
int str_hash[16];
|
#define SCRIPT_HASH_SIZE 1024
|
||||||
|
int str_hash[SCRIPT_HASH_SIZE];
|
||||||
|
|
||||||
static struct dbt *mapreg_db=NULL;
|
static struct dbt *mapreg_db=NULL;
|
||||||
static struct dbt *mapregstr_db=NULL;
|
static struct dbt *mapregstr_db=NULL;
|
||||||
@ -280,9 +281,9 @@ static int calc_hash(const unsigned char *p)
|
|||||||
int h=0;
|
int h=0;
|
||||||
while(*p){
|
while(*p){
|
||||||
h=(h<<1)+(h>>3)+(h>>5)+(h>>8);
|
h=(h<<1)+(h>>3)+(h>>5)+(h>>8);
|
||||||
h+=*p++;
|
h+=(unsigned char)tolower(*p++);
|
||||||
}
|
}
|
||||||
return h&15;
|
return h&(SCRIPT_HASH_SIZE-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
@ -295,7 +296,7 @@ static int search_str(const char *p)
|
|||||||
int i;
|
int i;
|
||||||
i=str_hash[calc_hash(p)];
|
i=str_hash[calc_hash(p)];
|
||||||
while(i){
|
while(i){
|
||||||
if(strcmp(str_buf+str_data[i].str,p)==0){
|
if(strcasecmp(str_buf+str_data[i].str,p)==0){
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
i=str_data[i].next;
|
i=str_data[i].next;
|
||||||
@ -312,16 +313,9 @@ int add_str(const char* p)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
int len;
|
int len;
|
||||||
char* lowcase;
|
|
||||||
|
|
||||||
lowcase=aStrdup(p);
|
if((i=search_str(p)) >= 0)
|
||||||
for(i=0;lowcase[i];i++)
|
|
||||||
lowcase[i]=TOLOWER(lowcase[i]);
|
|
||||||
if((i=search_str(lowcase))>=0){
|
|
||||||
aFree(lowcase);
|
|
||||||
return i;
|
return i;
|
||||||
}
|
|
||||||
aFree(lowcase);
|
|
||||||
|
|
||||||
i=calc_hash(p);
|
i=calc_hash(p);
|
||||||
if(str_hash[i]==0){
|
if(str_hash[i]==0){
|
||||||
@ -329,7 +323,7 @@ int add_str(const char* p)
|
|||||||
} else {
|
} else {
|
||||||
i=str_hash[i];
|
i=str_hash[i];
|
||||||
for(;;){
|
for(;;){
|
||||||
if(strcmp(str_buf+str_data[i].str,p)==0){
|
if(strcasecmp(str_buf+str_data[i].str,p)==0){
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
if(str_data[i].next==0)
|
if(str_data[i].next==0)
|
||||||
@ -369,7 +363,6 @@ static void expand_script_buf(void)
|
|||||||
{
|
{
|
||||||
script_size+=SCRIPT_BLOCK_SIZE;
|
script_size+=SCRIPT_BLOCK_SIZE;
|
||||||
RECREATE(script_buf,unsigned char,script_size);
|
RECREATE(script_buf,unsigned char,script_size);
|
||||||
malloc_tsetdword(script_buf + script_size - SCRIPT_BLOCK_SIZE, '\0', SCRIPT_BLOCK_SIZE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*==========================================
|
/*==========================================
|
||||||
@ -1514,7 +1507,7 @@ static void read_constdb(void)
|
|||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
char line[1024],name[1024],val[1024];
|
char line[1024],name[1024],val[1024];
|
||||||
int n,i,type;
|
int n,type;
|
||||||
|
|
||||||
sprintf(line, "%s/const.txt", db_path);
|
sprintf(line, "%s/const.txt", db_path);
|
||||||
fp=fopen(line, "r");
|
fp=fopen(line, "r");
|
||||||
@ -1528,8 +1521,6 @@ static void read_constdb(void)
|
|||||||
type=0;
|
type=0;
|
||||||
if(sscanf(line,"%[A-Za-z0-9_],%[-0-9xXA-Fa-f],%d",name,val,&type)>=2 ||
|
if(sscanf(line,"%[A-Za-z0-9_],%[-0-9xXA-Fa-f],%d",name,val,&type)>=2 ||
|
||||||
sscanf(line,"%[A-Za-z0-9_] %[-0-9xXA-Fa-f] %d",name,val,&type)>=2){
|
sscanf(line,"%[A-Za-z0-9_] %[-0-9xXA-Fa-f] %d",name,val,&type)>=2){
|
||||||
for(i=0;name[i];i++)
|
|
||||||
name[i]=TOLOWER(name[i]);
|
|
||||||
n=add_str(name);
|
n=add_str(name);
|
||||||
if(type==0)
|
if(type==0)
|
||||||
str_data[n].type=C_INT;
|
str_data[n].type=C_INT;
|
||||||
@ -1613,7 +1604,7 @@ struct script_code* parse_script(const char *src,const char *file,int line,int o
|
|||||||
}
|
}
|
||||||
first=0;
|
first=0;
|
||||||
|
|
||||||
CREATE(script_buf,unsigned char,SCRIPT_BLOCK_SIZE);
|
script_buf=(unsigned char *)aMalloc(SCRIPT_BLOCK_SIZE*sizeof(unsigned char));
|
||||||
script_pos=0;
|
script_pos=0;
|
||||||
script_size=SCRIPT_BLOCK_SIZE;
|
script_size=SCRIPT_BLOCK_SIZE;
|
||||||
str_data[LABEL_NEXTLINE].type=C_NOP;
|
str_data[LABEL_NEXTLINE].type=C_NOP;
|
||||||
@ -3270,6 +3261,42 @@ static int do_final_userfunc_sub (DBKey key,void *data,va_list ap)
|
|||||||
*/
|
*/
|
||||||
int do_final_script()
|
int do_final_script()
|
||||||
{
|
{
|
||||||
|
if (battle_config.etc_log)
|
||||||
|
{
|
||||||
|
FILE *fp = fopen("hash_dump.txt","wt");
|
||||||
|
if(fp) {
|
||||||
|
int i,count[SCRIPT_HASH_SIZE];
|
||||||
|
int min=0x7fffffff,max=0,zero=0;
|
||||||
|
|
||||||
|
ShowNotice("Dumping script str hash information to hash_dump.txt\n");
|
||||||
|
memset(count, 0, sizeof(count));
|
||||||
|
fprintf(fp,"num : calced_val -> hash : data_name\n");
|
||||||
|
fprintf(fp,"---------------------------------------------------------------\n");
|
||||||
|
for(i=LABEL_START; i<str_num; i++) {
|
||||||
|
int h=0;
|
||||||
|
char *p = str_buf+str_data[i].str;
|
||||||
|
while(*p){
|
||||||
|
h=(h<<1)+(h>>3)+(h>>5)+(h>>8);
|
||||||
|
h+=(unsigned char)tolower(*p++);
|
||||||
|
}
|
||||||
|
fprintf(fp,"%04d: %10d -> %3d : %s\n",i,h,h&(SCRIPT_HASH_SIZE-1),str_buf+str_data[i].str);
|
||||||
|
count[h&(SCRIPT_HASH_SIZE-1)]++;
|
||||||
|
}
|
||||||
|
fprintf(fp,"--------------------\n\n");
|
||||||
|
for(i=0; i<sizeof(count)/sizeof(count[0]); i++) {
|
||||||
|
fprintf(fp," hash %3d = %d\n",i,count[i]);
|
||||||
|
if(min > count[i])
|
||||||
|
min = count[i]; // minimun count of collision
|
||||||
|
if(max < count[i])
|
||||||
|
max = count[i]; // maximun count of collision
|
||||||
|
if(count[i] == 0)
|
||||||
|
zero++;
|
||||||
|
}
|
||||||
|
fprintf(fp,"--------------------\n min = %d, max = %d, zero = %d\n",min,max,zero);
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(mapreg_dirty>=0)
|
if(mapreg_dirty>=0)
|
||||||
script_save_mapreg();
|
script_save_mapreg();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user