neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

hashtab.h (982B)


      1 #pragma once
      2 
      3 #include <stddef.h>
      4 
      5 #include "nvim/hashtab_defs.h"  // IWYU pragma: keep
      6 
      7 /// Magic number used for hashitem "hi_key" value indicating a deleted item
      8 ///
      9 /// Only the address is used.
     10 extern char hash_removed;
     11 
     12 /// The address of "hash_removed" is used as a magic number
     13 /// for hi_key to indicate a removed item.
     14 #define HI_KEY_REMOVED (&hash_removed)
     15 #define HASHITEM_EMPTY(hi) ((hi)->hi_key == NULL || (hi)->hi_key == &hash_removed)
     16 
     17 /// Iterate over a hashtab
     18 ///
     19 /// @param[in]  ht  Hashtab to iterate over.
     20 /// @param  hi  Name of the variable with current hashtab entry.
     21 /// @param  code  Cycle body.
     22 #define HASHTAB_ITER(ht, hi, code) \
     23  do { \
     24    hashtab_T *const hi##ht_ = (ht); \
     25    size_t hi##todo_ = hi##ht_->ht_used; \
     26    for (hashitem_T *hi = hi##ht_->ht_array; hi##todo_; hi++) { \
     27      if (!HASHITEM_EMPTY(hi)) { \
     28        hi##todo_--; \
     29        { \
     30          code \
     31        } \
     32      } \
     33    } \
     34  } while (0)
     35 
     36 #include "hashtab.h.generated.h"