summaryrefslogtreecommitdiff
path: root/parser_st.h
diff options
context:
space:
mode:
Diffstat (limited to 'parser_st.h')
-rw-r--r--parser_st.h28
1 files changed, 12 insertions, 16 deletions
diff --git a/parser_st.h b/parser_st.h
index f22b5def4f..007ebb1bd4 100644
--- a/parser_st.h
+++ b/parser_st.h
@@ -67,10 +67,6 @@ struct parser_st_hash_type {
parser_st_index_t (*hash)(parser_st_data_t); /* parser_st_hash_func* */
};
-typedef struct st_functions {
- void *(*nonempty_memcpy)(void *dest, const void *src, size_t t, size_t n);
-} st_functions_t;
-
#define ST_INDEX_BITS (SIZEOF_ST_INDEX_T * CHAR_BIT)
#if defined(HAVE_BUILTIN___BUILTIN_CHOOSE_EXPR) && defined(HAVE_BUILTIN___BUILTIN_TYPES_COMPATIBLE_P)
@@ -92,15 +88,13 @@ struct parser_st_table {
const struct parser_st_hash_type *type;
/* Number of entries currently in the table. */
parser_st_index_t num_entries;
- /* Array of bins used for access by keys. */
- parser_st_index_t *bins;
/* Start and bound index of entries in array entries.
entries_starts and entries_bound are in interval
[0,allocated_entries]. */
parser_st_index_t entries_start, entries_bound;
- /* Array of size 2^entry_power. */
+ /* Array of size 2^entry_power.
+ Optionnally followed by an array of bins used for access by keys. */
parser_st_table_entry *entries;
- st_functions_t *functions;
};
#define parser_st_is_member(table,key) rb_parser_st_lookup((table),(key),(parser_st_data_t *)0)
@@ -108,14 +102,15 @@ struct parser_st_table {
enum parser_st_retval {ST2_CONTINUE, ST2_STOP, ST2_DELETE, ST2_CHECK, ST2_REPLACE};
size_t rb_parser_st_table_size(const struct parser_st_table *tbl);
-parser_st_table *rb_parser_st_init_table(const struct parser_st_hash_type *, st_functions_t *);
-parser_st_table *rb_parser_st_init_table_with_size(const struct parser_st_hash_type *, st_functions_t *, parser_st_index_t);
-parser_st_table *rb_parser_st_init_numtable(st_functions_t *);
-parser_st_table *rb_parser_st_init_numtable_with_size(st_functions_t *, parser_st_index_t);
-parser_st_table *rb_parser_st_init_strtable(st_functions_t *);
-parser_st_table *rb_parser_st_init_strtable_with_size(st_functions_t *, parser_st_index_t);
-parser_st_table *rb_parser_st_init_strcasetable(st_functions_t *);
-parser_st_table *rb_parser_st_init_strcasetable_with_size(st_functions_t *, parser_st_index_t);
+parser_st_table *rb_parser_st_init_table(const struct parser_st_hash_type *);
+parser_st_table *rb_parser_st_init_table_with_size(const struct parser_st_hash_type *, parser_st_index_t);
+parser_st_table *rb_parser_st_init_existing_table_with_size(parser_st_table *, const struct parser_st_hash_type *, parser_st_index_t);
+parser_st_table *rb_parser_st_init_numtable(void);
+parser_st_table *rb_parser_st_init_numtable_with_size(parser_st_index_t);
+parser_st_table *rb_parser_st_init_strtable(void);
+parser_st_table *rb_parser_st_init_strtable_with_size(parser_st_index_t);
+parser_st_table *rb_parser_st_init_strcasetable(void);
+parser_st_table *rb_parser_st_init_strcasetable_with_size(parser_st_index_t);
int rb_parser_st_delete(parser_st_table *, parser_st_data_t *, parser_st_data_t *); /* returns 0:notfound 1:deleted */
int rb_parser_st_delete_safe(parser_st_table *, parser_st_data_t *, parser_st_data_t *, parser_st_data_t);
int rb_parser_st_shift(parser_st_table *, parser_st_data_t *, parser_st_data_t *); /* returns 0:notfound 1:deleted */
@@ -141,6 +136,7 @@ void rb_parser_st_add_direct(parser_st_table *, parser_st_data_t, parser_st_data
void rb_parser_st_free_table(parser_st_table *);
void rb_parser_st_cleanup_safe(parser_st_table *, parser_st_data_t);
void rb_parser_st_clear(parser_st_table *);
+parser_st_table *rb_parser_st_replace(parser_st_table *, parser_st_table *);
parser_st_table *rb_parser_st_copy(parser_st_table *);
CONSTFUNC(int rb_parser_st_numcmp(parser_st_data_t, parser_st_data_t));
CONSTFUNC(parser_st_index_t rb_parser_st_numhash(parser_st_data_t));