mruby  2.0.1
mruby is the lightweight implementation of the Ruby language
Macros | Typedefs | Functions | Variables
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)   ((x)>>2|(x)>>1)
 
#define __ac_isempty(ed_flag, i)   (ed_flag[(i)/4]&__m_empty[(i)%4])
 
#define __ac_isdel(ed_flag, i)   (ed_flag[(i)/4]&__m_del[(i)%4])
 
#define __ac_iseither(ed_flag, i)   (ed_flag[(i)/4]&__m_either[(i)%4])
 
#define khash_power2(v)
 
#define khash_mask(h)   ((h)->n_buckets-1)
 
#define khash_upper_bound(h)   (UPPER_BOUND((h)->n_buckets))
 
#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)   kh_##name##_t
 
#define kh_init_size(name, mrb, size)   kh_init_##name##_size(mrb,size)
 
#define kh_init(name, mrb)   kh_init_##name(mrb)
 
#define kh_destroy(name, mrb, h)   kh_destroy_##name(mrb, h)
 
#define kh_clear(name, mrb, h)   kh_clear_##name(mrb, h)
 
#define kh_resize(name, mrb, h, s)   kh_resize_##name(mrb, h, s)
 
#define kh_put(name, mrb, h, k)   kh_put_##name(mrb, h, k, NULL)
 
#define kh_put2(name, mrb, h, k, r)   kh_put_##name(mrb, h, k, r)
 
#define kh_get(name, mrb, h, k)   kh_get_##name(mrb, h, k)
 
#define kh_del(name, mrb, h, k)   kh_del_##name(mrb, h, k)
 
#define kh_copy(name, mrb, h)   kh_copy_##name(mrb, h)
 
#define kh_exist(h, x)   (!__ac_iseither((h)->ed_flags, (x)))
 
#define kh_key(h, x)   ((h)->keys[x])
 
#define kh_val(h, x)   ((h)->vals[x])
 
#define kh_value(h, x)   ((h)->vals[x])
 
#define kh_begin(h)   (khint_t)(0)
 
#define kh_end(h)   ((h)->n_buckets)
 
#define kh_size(h)   ((h)->size)
 
#define kh_n_buckets(h)   ((h)->n_buckets)
 
#define kh_int_hash_func(mrb, key)   (khint_t)((key)^((key)<<2)^((key)>>2))
 
#define kh_int_hash_equal(mrb, a, b)   (a == b)
 
#define kh_int64_hash_func(mrb, key)   (khint_t)((key)>>33^(key)^(key)<<11)
 
#define kh_int64_hash_equal(mrb, a, b)   (a == b)
 
#define kh_str_hash_func(mrb, key)   __ac_X31_hash_string(key)
 
#define kh_str_hash_equal(mrb, a, b)   (strcmp(a, b) == 0)
 

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

See Copyright Notice in mruby.h

Macro Definition Documentation

◆ 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; \
khint_t n_occupied; \
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);
uint32_t khint_t
khash definitions used in mruby&#39;s hash table.
Definition: khash.h:20
Definition: mruby.h:215

◆ 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)