Skip to content
  1. Dec 06, 2000
  2. Dec 05, 2000
  3. Dec 04, 2000
  4. Dec 03, 2000
  5. Dec 02, 2000
    • Geoff Thorpe's avatar
      Use the new LHASH macros to declare type-safe wrapper functions that can · 35a99b63
      Geoff Thorpe authored
      be used as the hash/compare callbacks without function pointer casting.
      
      For now, this is just happening in the apps/ directory whilst a few people
      check the approach. The rest of the library will be moved across to the
      same idea if there's no problems with this.
      35a99b63
    • Geoff Thorpe's avatar
      Next step in tidying up the LHASH code. This commit defines DECLARE and · dfa46e50
      Geoff Thorpe authored
      IMPLEMENT macros for defining wrapper functions for "hash" and "cmp" callbacks
      that are specific to the underlying item type in a hash-table. This prevents
      function pointer casting altogether, and also provides some type-safety
      because the macro does per-variable casting from the (void *) type used in
      LHASH itself to the type declared in the macro - and if that doesn't match the
      prototype expected by the "hash" or "cmp" function then a compiler error will
      result.
      
      NB: IMPLEMENT macros are not required unless predeclared forms are required
      (either in a header file, or further up in a C file than the implementation
      needs to be). The DECLARE macros must occur after the type-specific hash/cmp
      callbacks are declared. Also, the IMPLEMENT and DECLARE macros are such that
      they can be prefixed with "static" if desired and a trailing semi-colon should
      be appended (making it look more like a regular declaration and easier on
      auto-formatting text-editors too).
      
      Now that these macros are defined, I will next be commiting changes to a
      number of places in the library where the casting was doing bad things. After
      that, the final step will be to make the analogous changes for the lh_doall
      and lh_doall_arg functions (more specifically, their callback parameters).
      dfa46e50