mruby 3.3.0
mruby is the lightweight implementation of the Ruby language
Loading...
Searching...
No Matches
khash.h File Reference

More...

#include <string.h>
#include <mruby.h>
#include "common.h"
Include dependency graph for khash.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Macros

#define KHASH_DEFAULT_SIZE   32
 
#define KHASH_MIN_SIZE   8
 
#define UPPER_BOUND(x)
 
#define __ac_isempty(ed_flag, i)
 
#define __ac_isdel(ed_flag, i)
 
#define __ac_iseither(ed_flag, i)
 
#define khash_power2(v)
 
#define khash_mask(h)
 
#define khash_upper_bound(h)
 
#define KHASH_DECLARE(name, khkey_t, khval_t, kh_is_map)
 
#define KHASH_DEFINE(name, khkey_t, khval_t, kh_is_map, __hash_func, __hash_equal)
 
#define khash_t(name)
 
#define kh_init_size(name, mrb, size)
 
#define kh_init(name, mrb)
 
#define kh_destroy(name, mrb, h)
 
#define kh_clear(name, mrb, h)
 
#define kh_resize(name, mrb, h, s)
 
#define kh_put(name, mrb, h, k)
 
#define kh_put2(name, mrb, h, k, r)
 
#define kh_get(name, mrb, h, k)
 
#define kh_del(name, mrb, h, k)
 
#define kh_copy(name, mrb, h)
 
#define kh_exist(h, x)
 
#define kh_key(h, x)
 
#define kh_val(h, x)
 
#define kh_value(h, x)
 
#define kh_begin(h)
 
#define kh_end(h)
 
#define kh_size(h)
 
#define kh_n_buckets(h)
 
#define kh_int_hash_func(mrb, key)
 
#define kh_int_hash_equal(mrb, a, b)
 
#define kh_int64_hash_func(mrb, key)
 
#define kh_int64_hash_equal(mrb, a, b)
 
#define kh_str_hash_func(mrb, key)
 
#define kh_str_hash_equal(mrb, a, b)
 

Typedefs

typedef uint32_t khint_t
 khash definitions used in mruby's hash table.
 
typedef khint_t khiter_t
 
typedef const char * kh_cstr_t
 

Functions

static void kh_fill_flags (uint8_t *p, uint8_t c, size_t len)
 
static khint_t __ac_X31_hash_string (const char *s)
 

Variables

static const uint8_t __m_empty [] = {0x02, 0x08, 0x20, 0x80}
 
static const uint8_t __m_del [] = {0x01, 0x04, 0x10, 0x40}
 
static const uint8_t __m_either [] = {0x03, 0x0c, 0x30, 0xc0}
 

Detailed Description

  • Hash for mruby

See Copyright Notice in mruby.h

Macro Definition Documentation

◆ __ac_isdel

#define __ac_isdel ( ed_flag,
i )
Value:
(ed_flag[(i)/4]&__m_del[(i)%4])

◆ __ac_iseither

#define __ac_iseither ( ed_flag,
i )
Value:
(ed_flag[(i)/4]&__m_either[(i)%4])

◆ __ac_isempty

#define __ac_isempty ( ed_flag,
i )
Value:
(ed_flag[(i)/4]&__m_empty[(i)%4])

◆ kh_begin

#define kh_begin ( h)
Value:
(khint_t)(0)
uint32_t khint_t
khash definitions used in mruby's hash table.
Definition khash.h:20

◆ kh_clear

#define kh_clear ( name,
mrb,
h )
Value:
kh_clear_##name(mrb, h)

◆ kh_copy

#define kh_copy ( name,
mrb,
h )
Value:
kh_copy_##name(mrb, h)

◆ kh_del

#define kh_del ( name,
mrb,
h,
k )
Value:
kh_del_##name(mrb, h, k)

◆ kh_destroy

#define kh_destroy ( name,
mrb,
h )
Value:
kh_destroy_##name(mrb, h)

◆ kh_end

#define kh_end ( h)
Value:
((h)->n_buckets)

◆ kh_exist

#define kh_exist ( h,
x )
Value:
(!__ac_iseither((h)->ed_flags, (x)))

◆ kh_get

#define kh_get ( name,
mrb,
h,
k )
Value:
kh_get_##name(mrb, h, k)

◆ kh_init

#define kh_init ( name,
mrb )
Value:
kh_init_##name(mrb)

◆ kh_init_size

#define kh_init_size ( name,
mrb,
size )
Value:
kh_init_##name##_size(mrb,size)

◆ kh_int64_hash_equal

#define kh_int64_hash_equal ( mrb,
a,
b )
Value:
(a == b)

◆ kh_int64_hash_func

#define kh_int64_hash_func ( mrb,
key )
Value:
(khint_t)((key)>>33^(key)^(key)<<11)

◆ kh_int_hash_equal

#define kh_int_hash_equal ( mrb,
a,
b )
Value:
(a == b)

◆ kh_int_hash_func

#define kh_int_hash_func ( mrb,
key )
Value:
(khint_t)((key)^((key)<<2)^((key)>>2))

◆ kh_key

#define kh_key ( h,
x )
Value:
((h)->keys[x])

◆ kh_n_buckets

#define kh_n_buckets ( h)
Value:
((h)->n_buckets)

◆ kh_put

#define kh_put ( name,
mrb,
h,
k )
Value:
kh_put_##name(mrb, h, k, NULL)

◆ kh_put2

#define kh_put2 ( name,
mrb,
h,
k,
r )
Value:
kh_put_##name(mrb, h, k, r)

◆ kh_resize

#define kh_resize ( name,
mrb,
h,
s )
Value:
kh_resize_##name(mrb, h, s)

◆ kh_size

#define kh_size ( h)
Value:
((h)->size)

◆ kh_str_hash_equal

#define kh_str_hash_equal ( mrb,
a,
b )
Value:
(strcmp(a, b) == 0)

◆ kh_str_hash_func

#define kh_str_hash_func ( mrb,
key )
Value:
__ac_X31_hash_string(key)

◆ kh_val

#define kh_val ( h,
x )
Value:
((h)->vals[x])

◆ kh_value

#define kh_value ( h,
x )
Value:
((h)->vals[x])

◆ KHASH_DECLARE

#define KHASH_DECLARE ( name,
khkey_t,
khval_t,
kh_is_map )
Value:
typedef struct kh_##name { \
khint_t n_buckets; \
khint_t size; \
uint8_t *ed_flags; \
khkey_t *keys; \
khval_t *vals; \
} kh_##name##_t; \
void kh_alloc_##name(mrb_state *mrb, kh_##name##_t *h); \
kh_##name##_t *kh_init_##name##_size(mrb_state *mrb, khint_t size); \
kh_##name##_t *kh_init_##name(mrb_state *mrb); \
void kh_destroy_##name(mrb_state *mrb, kh_##name##_t *h); \
void kh_clear_##name(mrb_state *mrb, kh_##name##_t *h); \
khint_t kh_get_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key); \
khint_t kh_put_##name(mrb_state *mrb, kh_##name##_t *h, khkey_t key, int *ret); \
void kh_resize_##name(mrb_state *mrb, kh_##name##_t *h, khint_t new_n_buckets); \
void kh_del_##name(mrb_state *mrb, kh_##name##_t *h, khint_t x); \
kh_##name##_t *kh_copy_##name(mrb_state *mrb, kh_##name##_t *h);
Definition mruby.h:256

◆ khash_mask

#define khash_mask ( h)
Value:
((h)->n_buckets-1)

◆ khash_power2

#define khash_power2 ( v)
Value:
do { \
v--;\
v |= v >> 1;\
v |= v >> 2;\
v |= v >> 4;\
v |= v >> 8;\
v |= v >> 16;\
v++;\
} while (0)

◆ khash_t

#define khash_t ( name)
Value:
kh_##name##_t

◆ khash_upper_bound

#define khash_upper_bound ( h)
Value:
(UPPER_BOUND((h)->n_buckets))

◆ UPPER_BOUND

#define UPPER_BOUND ( x)
Value:
((x)>>2|(x)>>1)