forked from enlightenment/efl
stringshare buckets -> 1024 + debugging for testing.
SVN revision: 34509
This commit is contained in:
parent
69a1a1a2e0
commit
6c439dbd46
|
@ -6,32 +6,70 @@ typedef struct _Evas_Stringshare_El Evas_Stringshare_El;
|
||||||
|
|
||||||
struct _Evas_Stringshare
|
struct _Evas_Stringshare
|
||||||
{
|
{
|
||||||
Evas_Stringshare_El *buckets[256];
|
Evas_Stringshare_El *buckets[1024];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _Evas_Stringshare_El
|
struct _Evas_Stringshare_El
|
||||||
{
|
{
|
||||||
Evas_Stringshare_El *next;
|
Evas_Stringshare_El *next;
|
||||||
|
// int op;
|
||||||
int references;
|
int references;
|
||||||
};
|
};
|
||||||
|
|
||||||
static inline int
|
|
||||||
_evas_stringshare_hash_gen(const char *str, int *len)
|
|
||||||
{
|
|
||||||
unsigned int hash_num = 5381, i;
|
|
||||||
const unsigned char *ptr;
|
|
||||||
|
|
||||||
for (i = 0, ptr = (unsigned char *)str; *ptr; ptr++, i++)
|
|
||||||
hash_num = (hash_num * 33) ^ *ptr;
|
|
||||||
|
|
||||||
hash_num &= 0xff;
|
|
||||||
*len = i;
|
|
||||||
return (int)hash_num;
|
|
||||||
}
|
|
||||||
|
|
||||||
static Evas_Stringshare share =
|
static Evas_Stringshare share =
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
|
||||||
|
@ -51,6 +89,25 @@ static Evas_Stringshare share =
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//static int op = 0;
|
||||||
|
//static FILE *f = NULL;
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
_evas_stringshare_hash_gen(const char *str, int *len)
|
||||||
|
{
|
||||||
|
unsigned int hash_num = 5381;
|
||||||
|
const unsigned char *ptr;
|
||||||
|
|
||||||
|
for (ptr = (const unsigned char *)str; *ptr; ptr++)
|
||||||
|
{
|
||||||
|
hash_num = (hash_num * 33) ^ *ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
hash_num &= 0x3ff;
|
||||||
|
*len = ptr - (const unsigned char *)str;
|
||||||
|
return (int)hash_num;
|
||||||
|
}
|
||||||
|
|
||||||
EAPI const char *
|
EAPI const char *
|
||||||
evas_stringshare_add(const char *str)
|
evas_stringshare_add(const char *str)
|
||||||
{
|
{
|
||||||
|
@ -59,6 +116,12 @@ evas_stringshare_add(const char *str)
|
||||||
Evas_Stringshare_El *el, *pel = NULL;
|
Evas_Stringshare_El *el, *pel = NULL;
|
||||||
|
|
||||||
if (!str) return NULL;
|
if (!str) return NULL;
|
||||||
|
// if (!f)
|
||||||
|
// {
|
||||||
|
// char bf[256];
|
||||||
|
// snprintf(bf, sizeof(bf), "strlog-%i", getpid());
|
||||||
|
// f = fopen(bf, "w");
|
||||||
|
// }
|
||||||
hash_num = _evas_stringshare_hash_gen(str, &slen);
|
hash_num = _evas_stringshare_hash_gen(str, &slen);
|
||||||
for (el = share.buckets[hash_num]; el; pel = el, el = el->next)
|
for (el = share.buckets[hash_num]; el; pel = el, el = el->next)
|
||||||
{
|
{
|
||||||
|
@ -72,7 +135,8 @@ evas_stringshare_add(const char *str)
|
||||||
share.buckets[hash_num] = el;
|
share.buckets[hash_num] = el;
|
||||||
}
|
}
|
||||||
el->references++;
|
el->references++;
|
||||||
// printf("SSHARE + \"%s\", ref %i\n", el_str, el->references);
|
// fprintf(f, "strings[%i] = str->add(strings[%i]);\n", el->op, el->op);
|
||||||
|
// fflush(f);
|
||||||
return el_str;
|
return el_str;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,6 +146,10 @@ evas_stringshare_add(const char *str)
|
||||||
el->references = 1;
|
el->references = 1;
|
||||||
el->next = share.buckets[hash_num];
|
el->next = share.buckets[hash_num];
|
||||||
share.buckets[hash_num] = el;
|
share.buckets[hash_num] = el;
|
||||||
|
// el->op = op;
|
||||||
|
// fprintf(f, "strings[%i] = str->add(\"%s\");\n", el->op, el_str);
|
||||||
|
// fflush(f);
|
||||||
|
// op++;
|
||||||
return el_str;
|
return el_str;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,6 +168,8 @@ evas_stringshare_del(const char *str)
|
||||||
if (el_str == str)
|
if (el_str == str)
|
||||||
{
|
{
|
||||||
el->references--;
|
el->references--;
|
||||||
|
// fprintf(f, "str->del(strings[%i]);\n", el->op);
|
||||||
|
// fflush(f);
|
||||||
if (el->references == 0)
|
if (el->references == 0)
|
||||||
{
|
{
|
||||||
if (pel) pel->next = el->next;
|
if (pel) pel->next = el->next;
|
||||||
|
|
Loading…
Reference in New Issue