Edit

kc3-lang/kc3/libc3/skiplist.h.in

Branch :

  • libc3/skiplist.h.in
  • /* c3
     * Copyright 2022 kmx.io <contact@kmx.io>
     *
     * Permission is hereby granted to use this software excepted
     * on Apple computers granted the above copyright notice and
     * this permission paragraph are included in all copies and
     * substantial portions of this software.
     *
     * THIS SOFTWARE IS PROVIDED "AS-IS" WITHOUT ANY GUARANTEE OF
     * PURPOSE AND PERFORMANCE. IN NO EVENT WHATSOEVER SHALL THE
     * AUTHOR BE CONSIDERED LIABLE FOR THE USE AND PERFORMANCE OF
     * THIS SOFTWARE.
     */
    /* Gen from skiplist.h.in NAME=_NAME$ TYPE=_TYPE$ */
    /**
     * @file skiplist___NAME$.h
     * @brief Skiplist of _NAME$s.
     *
     * Skiplist containing _TYPE$.
     */
    #ifndef SKIPLIST___NAME$_H
    #define SKIPLIST___NAME$_H
    
    #include "types.h"
    
    #define SKIPLIST_HEIGHT_TABLE___NAME$(skiplist) \
      ((sw *) (((s_skiplist___NAME$ *) skiplist) + 1))
    
    #define SKIPLIST_SIZE___NAME$(max_height) \
      (sizeof(s_skiplist___NAME$) + (max_height) * sizeof(sw))
    
    #define SKIPLIST_INIT_ALLOCA___NAME$(max_height, spacing) \
      (skiplist_init___NAME$(alloca(SKIPLIST_SIZE___NAME$(max_height)), \
                             (max_height), (spacing)))
    
    void
    skiplist_clean___NAME$ (s_skiplist___NAME$ *skiplist);
    
    void
    skiplist_delete___NAME$ (s_skiplist___NAME$ *skiplist);
    
    s_skiplist_node___NAME$ *
    skiplist_find___NAME$ (s_skiplist___NAME$ *skiplist, _TYPE$ value);
    
    s_skiplist___NAME$ *
    skiplist_init___NAME$ (s_skiplist___NAME$ *skiplist, u8 max_height, f64 spacing);
    
    s_skiplist_node___NAME$ *
    skiplist_insert___NAME$ (s_skiplist___NAME$ *skiplist, _TYPE$ value);
    
    s_skiplist___NAME$ *
    skiplist_new___NAME$ (u8 max_height, f64 spacing);
    
    s_skiplist_node___NAME$ *
    skiplist_pred___NAME$ (s_skiplist___NAME$ *skiplist, _TYPE$ value);
    
    u8
    skiplist_random_height___NAME$ (s_skiplist___NAME$ *skiplist);
    
    e_bool
    skiplist_remove___NAME$ (s_skiplist___NAME$ *skiplist, _TYPE$ value);
    
    #endif /* SKIPLIST___NAME$_H */