XenevaOS
Loading...
Searching...
No Matches
Classes | Macros
hashtable.h File Reference
#include <linux/kernel.h>
Include dependency graph for hashtable.h:

Go to the source code of this file.

Classes

struct  hlist_node
 
struct  hlist_head
 

Macros

#define INIT_HLIST_HEAD(head)   do { (head)->first = 0; } while (0)
 
#define INIT_HLIST_NODE(node)   do { (node)->next = 0; (node)->pprev = 0; } while (0)
 
#define hlist_entry(ptr, type, member)   container_of(ptr, type, member)
 
#define hlist_entry_safe(ptr, type, member)    ((ptr) ? hlist_entry(ptr, type, member) : (type*)0)
 
#define hlist_for_each_entry(pos, head, member)
 
#define DECLARE_HASHTABLE(name, bits)   struct hlist_head name[1 << (bits)]
 
#define DEFINE_HASHTABLE(name, bits)   DECLARE_HASHTABLE(name, bits)
 
#define HASH_BITS(name)   ((int)__builtin_ctz(sizeof(name) / sizeof(*(name))))
 
#define hash_min(key, bits)   ((unsigned int)(key) & ((1u << (bits)) - 1u))
 
#define hash_add(hashtable, node, key)    hlist_add_head(node, &hashtable[hash_min(key, HASH_BITS(hashtable))])
 
#define hash_del(node)   hlist_del(node)
 
#define hash_empty(hashtable)   __hash_empty(hashtable, HASH_BITS(hashtable))
 
#define hash_for_each_possible(name, obj, member, key)
 
#define hash_for_each_safe(name, bkt, tmp, obj, member)
 
#define hash_for_each_possible_safe(name, obj, tmp, key, member)
 
#define hlist_for_each_entry_safe(pos, n, head, member)
 

Macro Definition Documentation

◆ DECLARE_HASHTABLE

#define DECLARE_HASHTABLE (   name,
  bits 
)    struct hlist_head name[1 << (bits)]

◆ DEFINE_HASHTABLE

#define DEFINE_HASHTABLE (   name,
  bits 
)    DECLARE_HASHTABLE(name, bits)

◆ hash_add

#define hash_add (   hashtable,
  node,
  key 
)     hlist_add_head(node, &hashtable[hash_min(key, HASH_BITS(hashtable))])

◆ HASH_BITS

#define HASH_BITS (   name)    ((int)__builtin_ctz(sizeof(name) / sizeof(*(name))))

◆ hash_del

#define hash_del (   node)    hlist_del(node)

◆ hash_empty

#define hash_empty (   hashtable)    __hash_empty(hashtable, HASH_BITS(hashtable))

◆ hash_for_each_possible

#define hash_for_each_possible (   name,
  obj,
  member,
  key 
)
Value:
&name[hash_min((unsigned int)(key), HASH_BITS(name))], member)
#define hlist_for_each_entry(pos, head, member)
Definition hashtable.h:77
#define HASH_BITS(name)
Definition hashtable.h:85
#define hash_min(key, bits)
Definition hashtable.h:88
struct drm_crtc struct drm_plane struct drm_plane const struct drm_crtc_funcs const char * name
Definition drm_crtc.h:1242

◆ hash_for_each_possible_safe

#define hash_for_each_possible_safe (   name,
  obj,
  tmp,
  key,
  member 
)
Value:
&name[hash_min((unsigned int)(key), HASH_BITS(name))], member)
#define hlist_for_each_entry_safe(pos, n, head, member)
Definition hashtable.h:120

◆ hash_for_each_safe

#define hash_for_each_safe (   name,
  bkt,
  tmp,
  obj,
  member 
)
Value:
for ((bkt) = 0, (obj) = 0; (bkt) < (1u << HASH_BITS(name)) && \
(((obj) = hlist_entry_safe(name[bkt].first, typeof(*obj), member)), 1); \
(bkt)++, \
(obj) = 0)
#define hlist_entry_safe(ptr, type, member)
Definition hashtable.h:74

◆ hash_min

#define hash_min (   key,
  bits 
)    ((unsigned int)(key) & ((1u << (bits)) - 1u))

◆ hlist_entry

#define hlist_entry (   ptr,
  type,
  member 
)    container_of(ptr, type, member)

◆ hlist_entry_safe

#define hlist_entry_safe (   ptr,
  type,
  member 
)     ((ptr) ? hlist_entry(ptr, type, member) : (type*)0)

◆ hlist_for_each_entry

#define hlist_for_each_entry (   pos,
  head,
  member 
)
Value:
for (pos = hlist_entry_safe((head)->first, typeof(*pos), member); \
pos; \
pos = hlist_entry_safe((pos)->member.next, typeof(*pos), member))
int const struct list_head const struct list_head struct list_head * head
Definition list_sort.h:13

◆ hlist_for_each_entry_safe

#define hlist_for_each_entry_safe (   pos,
  n,
  head,
  member 
)
Value:
for (pos = hlist_entry_safe((head)->first, typeof(*pos), member); \
pos && ({ n = pos->member.next; 1; }); \
pos = hlist_entry_safe(n, typeof(*pos), member))

◆ INIT_HLIST_HEAD

#define INIT_HLIST_HEAD (   head)    do { (head)->first = 0; } while (0)

◆ INIT_HLIST_NODE

#define INIT_HLIST_NODE (   node)    do { (node)->next = 0; (node)->pprev = 0; } while (0)