URI: 
       add Fowler Noll Vo hash function - reed-alert - Lightweight agentless alerting system for server
  HTML git clone git://bitreich.org/reed-alert/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/reed-alert/
   DIR Log
   DIR Files
   DIR Refs
   DIR Tags
   DIR README
   DIR LICENSE
       ---
   DIR commit 1b2f15bf2974f893f7dd55ff6b4742dd0c0430d2
   DIR parent 3f03224030fd0b48e2de384f56c78834da14643b
  HTML Author: Solene Rapenne <solene@perso.pw>
       Date:   Wed, 17 Jan 2018 07:57:38 +0100
       
       add Fowler Noll Vo hash function
       
       Diffstat:
         M functions.lisp                      |      17 +++++++++++++++--
       
       1 file changed, 15 insertions(+), 2 deletions(-)
       ---
   DIR diff --git a/functions.lisp b/functions.lisp
       @@ -10,6 +10,18 @@
        (defparameter *green*  (color 1 32))
        (defparameter *yellow* (color 0 33))
        
       +;; simple hash function (Fowler Noll Vo)
       +;; https://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function
       +(defun fnv-hash(string)
       +  "return a hash from a string"
       +  (let ((FNV_prime 2)
       +        (hash 26123230013))
       +    (loop for octet-of-data across string
       +       do
       +         (setf hash (* FNV_prime
       +                       (logxor hash (char-code octet-of-data)))))
       +    hash))
       +
        ;; common-lisp don't have a split string function natively
        (defun replace-all (string part replacement &key (test #'char=))
          (with-output-to-string (out)
       @@ -72,8 +84,9 @@
             (or ,@body)))
        
        (defun =>(level fonction &rest params)
       -  (format t "[~a~a ~20A~a] ~35A" *yellow* level fonction *white* (getf params :desc params))
       -  (let ((result (funcall fonction params)))
       +  (format t "[~a~a ~20A~a] ~45A" *yellow* level fonction *white* (getf params :desc params))
       +  (let ((hash (fnv-hash (format nil "~{~a~}" (nconc (list level fonction) (remove-if #'symbolp params)))))
       +        (result (funcall fonction params)))
            (if (not (listp result))
                (progn
                  (format t " => ~asuccess~a~%" *green* *white*)