mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-03 00:02:50 -06:00
remove the string internalization since it slows down grammar loading with little benefit
This commit is contained in:
@@ -1,59 +0,0 @@
|
||||
#include "intern.h"
|
||||
|
||||
struct GuIntern {
|
||||
GuPool* str_pool;
|
||||
GuMap* map;
|
||||
};
|
||||
|
||||
GuIntern*
|
||||
gu_new_intern(GuPool* str_pool, GuPool* pool)
|
||||
{
|
||||
GuIntern* intern = gu_new(GuIntern, pool);
|
||||
intern->str_pool = str_pool;
|
||||
intern->map = gu_new_set(const char*, gu_str_hasher, pool);
|
||||
return intern;
|
||||
}
|
||||
|
||||
const char*
|
||||
gu_intern_str(GuIntern* intern, const char* cstr)
|
||||
{
|
||||
const char* const* strp = gu_map_find_key(intern->map, &cstr);
|
||||
if (strp) {
|
||||
return *strp;
|
||||
}
|
||||
const char* str = gu_strdup(cstr, intern->str_pool);
|
||||
gu_map_insert(intern->map, &str);
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
struct GuSymTable {
|
||||
GuPool* sym_pool;
|
||||
GuMap* map;
|
||||
};
|
||||
|
||||
GuSymTable*
|
||||
gu_new_symtable(GuPool* sym_pool, GuPool* pool)
|
||||
{
|
||||
GuSymTable* tab = gu_new(GuSymTable, pool);
|
||||
tab->sym_pool = sym_pool;
|
||||
tab->map = gu_new_set(GuSymbol, gu_string_hasher, pool);
|
||||
return tab;
|
||||
}
|
||||
|
||||
GuSymbol
|
||||
gu_symtable_intern(GuSymTable* tab, GuString string)
|
||||
{
|
||||
if (gu_string_is_stable(string)) {
|
||||
return string;
|
||||
}
|
||||
const GuSymbol* symp = gu_map_find_key(tab->map, &string);
|
||||
if (symp) {
|
||||
return *symp;
|
||||
}
|
||||
GuSymbol sym = gu_string_copy(string, tab->sym_pool);
|
||||
gu_map_insert(tab->map, &sym);
|
||||
return sym;
|
||||
}
|
||||
@@ -1,24 +0,0 @@
|
||||
#ifndef GU_INTERN_H_
|
||||
#define GU_INTERN_H_
|
||||
|
||||
#include <gu/map.h>
|
||||
#include <gu/str.h>
|
||||
#include <gu/string.h>
|
||||
|
||||
typedef struct GuIntern GuIntern;
|
||||
|
||||
GuIntern* gu_new_intern(GuPool* str_pool, GuPool* pool);
|
||||
const char* gu_intern_str(GuIntern* intern, const char* cstr);
|
||||
|
||||
|
||||
typedef struct GuSymTable GuSymTable;
|
||||
|
||||
typedef GuString GuSymbol;
|
||||
|
||||
GuSymTable*
|
||||
gu_new_symtable(GuPool* sym_pool, GuPool* pool);
|
||||
|
||||
GuSymbol
|
||||
gu_symtable_intern(GuSymTable* symtab, GuString string);
|
||||
|
||||
#endif /* GU_INTERN_H_ */
|
||||
Reference in New Issue
Block a user