Commit 9676edda authored by Yukihiro Matsumoto's avatar Yukihiro Matsumoto

replace st.[ch] to remove SIZEOF_ST_INDEX_T

parent 748d762e
...@@ -922,6 +922,31 @@ enc_name(mrb_state *mrb, mrb_value self) ...@@ -922,6 +922,31 @@ enc_name(mrb_state *mrb, mrb_value self)
return mrb_usascii_str_new2(mrb, mrb_enc_name((mrb_encoding*)DATA_PTR(self))); return mrb_usascii_str_new2(mrb, mrb_enc_name((mrb_encoding*)DATA_PTR(self)));
} }
struct fn_arg {
mrb_state *mrb;
int (*func)(ANYARGS);
void *a;
};
static int
fn_i(st_data_t key, st_data_t val, st_data_t arg) {
struct fn_arg *a = (struct fn_arg*)arg;
return (*a->func)(a->mrb, key, val, a->a);
}
static int
st_foreachNew(mrb_state *mrb, st_table *tbl, int (*func)(ANYARGS), void *a)
{
struct fn_arg arg = {
mrb,
func,
a,
};
return st_foreach(tbl, fn_i, (st_data_t)&arg);
}
static int static int
enc_names_i(mrb_state *mrb, st_data_t name, st_data_t idx, st_data_t args) enc_names_i(mrb_state *mrb, st_data_t name, st_data_t idx, st_data_t args)
{ {
......
This diff is collapsed.
...@@ -9,23 +9,8 @@ ...@@ -9,23 +9,8 @@
extern "C" { extern "C" {
#endif #endif
#ifndef RUBY_LIB_PREFIX
#ifdef RUBY_EXTCONF_H
#include RUBY_EXTCONF_H
#endif
#endif
#if defined STDC_HEADERS
#include <stddef.h>
#elif defined HAVE_STDLIB_H
#include <stdlib.h> #include <stdlib.h>
#endif #include <stdint.h>
#ifdef HAVE_STDINT_H
# include <stdint.h>
#endif
#include <inttypes.h>
#ifndef CHAR_BIT #ifndef CHAR_BIT
# ifdef HAVE_LIMITS_H # ifdef HAVE_LIMITS_H
...@@ -35,10 +20,6 @@ extern "C" { ...@@ -35,10 +20,6 @@ extern "C" {
# endif # endif
#endif #endif
#ifndef _
# define _(args) args
#endif
#ifndef ANYARGS #ifndef ANYARGS
# ifdef __cplusplus # ifdef __cplusplus
# define ANYARGS ... # define ANYARGS ...
...@@ -69,16 +50,10 @@ struct st_hash_type { ...@@ -69,16 +50,10 @@ struct st_hash_type {
st_index_t (*hash)(ANYARGS /*st_data_t*/); /* st_hash_func* */ st_index_t (*hash)(ANYARGS /*st_data_t*/); /* st_hash_func* */
}; };
#define ST_INDEX_BITS (sizeof(st_index_t) * CHAR_BIT)
struct st_table { struct st_table {
const struct st_hash_type *type; const struct st_hash_type *type;
st_index_t num_bins; int num_bins;
unsigned int entries_packed : 1; int num_entries;
#ifdef __GNUC__
__extension__
#endif
st_index_t num_entries : ST_INDEX_BITS - 1;
struct st_table_entry **bins; struct st_table_entry **bins;
struct st_table_entry *head, *tail; struct st_table_entry *head, *tail;
}; };
...@@ -88,46 +63,37 @@ struct st_table { ...@@ -88,46 +63,37 @@ struct st_table {
enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK}; enum st_retval {ST_CONTINUE, ST_STOP, ST_DELETE, ST_CHECK};
st_table *st_init_table(const struct st_hash_type *); st_table *st_init_table(const struct st_hash_type *);
st_table *st_init_table_with_size(const struct st_hash_type *, st_index_t); st_table *st_init_table_with_size(const struct st_hash_type *, int);
st_table *st_init_numtable(void); st_table *st_init_numtable(void);
st_table *st_init_numtable_with_size(st_index_t); st_table *st_init_numtable_with_size(int);
st_table *st_init_strtable(void); st_table *st_init_strtable(void);
st_table *st_init_strtable_with_size(st_index_t); st_table *st_init_strtable_with_size(int);
st_table *st_init_strcasetable(void); st_table *st_init_strcasetable(void);
st_table *st_init_strcasetable_with_size(st_index_t); st_table *st_init_strcasetable_with_size(st_index_t);
int st_delete(st_table *, st_data_t *, st_data_t *); /* returns 0:notfound 1:deleted */ int st_delete(st_table *, st_data_t *, st_data_t *);
int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t); int st_delete_safe(st_table *, st_data_t *, st_data_t *, st_data_t);
int st_insert(st_table *, st_data_t, st_data_t); int st_insert(st_table *, st_data_t, st_data_t);
int st_insert2(st_table *, st_data_t, st_data_t, st_data_t (*)(st_data_t));
int st_lookup(st_table *, st_data_t, st_data_t *); int st_lookup(st_table *, st_data_t, st_data_t *);
int st_get_key(st_table *, st_data_t, st_data_t *);
int st_foreach(st_table *, int (*)(ANYARGS), st_data_t); int st_foreach(st_table *, int (*)(ANYARGS), st_data_t);
int st_foreachNew(mrb_state *mrb, st_table *, int (*)(ANYARGS), void*);
int st_reverse_foreach(st_table *, int (*)(ANYARGS), st_data_t);
void st_add_direct(st_table *, st_data_t, st_data_t); void st_add_direct(st_table *, st_data_t, st_data_t);
void st_free_table(st_table *); void st_free_table(st_table *);
void st_cleanup_safe(st_table *, st_data_t); void st_cleanup_safe(st_table *, st_data_t);
void st_clear(st_table *);
st_table *st_copy(st_table *); st_table *st_copy(st_table *);
int st_numcmp(st_data_t, st_data_t);
st_index_t st_numhash(st_data_t);
int st_strcasecmp(const char *s1, const char *s2);
int st_strncasecmp(const char *s1, const char *s2, size_t n);
size_t st_memsize(const st_table *);
st_index_t st_hash(const void *ptr, size_t len, st_index_t h);
st_index_t st_hash_uint32(st_index_t h, uint32_t i);
st_index_t st_hash_uint(st_index_t h, st_index_t i);
st_index_t st_hash_end(st_index_t h);
st_index_t st_hash_start(st_index_t h);
#define st_hash_start(h) ((st_index_t)(h))
int st_strcasecmp(const char *s1, const char *s2); int st_strcasecmp(const char *s1, const char *s2);
int st_strncasecmp(const char *s1, const char *s2, size_t n); int st_strncasecmp(const char *s1, const char *s2, size_t n);
#define STRCASECMP(s1, s2) (st_strcasecmp(s1, s2)) #define STRCASECMP(s1, s2) (st_strcasecmp(s1, s2))
#define STRNCASECMP(s1, s2, n) (st_strncasecmp(s1, s2, n)) #define STRNCASECMP(s1, s2, n) (st_strncasecmp(s1, s2, n))
#define ST_NUMCMP ((int (*)()) 0)
#define ST_NUMHASH ((int (*)()) -2)
#define st_numcmp ST_NUMCMP
#define st_numhash ST_NUMHASH
int st_strhash();
#if defined(__cplusplus) #if defined(__cplusplus)
} /* extern "C" { */ } /* extern "C" { */
#endif #endif
#endif /* RUBY_ST_H */ #endif /* ST_INCLUDED */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment