From b384a96e4a0692d8ed01d4ddf34ccba204e3d7f6 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Tue, 10 Jan 2023 15:31:01 -0800 Subject: til_jenkins: add a rudimentary hash function Presently just for hashing paths and names --- src/Makefile.am | 2 +- src/til_jenkins.c | 26 ++++++++++++++++++++++++++ src/til_jenkins.h | 9 +++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 src/til_jenkins.c create mode 100644 src/til_jenkins.h (limited to 'src') diff --git a/src/Makefile.am b/src/Makefile.am index 692b56e..efb7cc0 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,7 +1,7 @@ SUBDIRS = libs modules noinst_LTLIBRARIES = libtil.la -libtil_la_SOURCES = til_args.c til_args.h til_fb.c til_fb.h til_knobs.h til.c til.h til_module_context.c til_module_context.h til_settings.h til_settings.c til_setup.c til_setup.h til_tap.h til_threads.c til_threads.h til_util.c til_util.h +libtil_la_SOURCES = til_args.c til_args.h til_fb.c til_fb.h til_jenkins.c til_jenkins.h til_knobs.h til.c til.h til_module_context.c til_module_context.h til_settings.h til_settings.c til_setup.c til_setup.h til_tap.h til_threads.c til_threads.h til_util.c til_util.h libtil_la_CPPFLAGS = -I@top_srcdir@/src libtil_la_LIBADD = modules/blinds/libblinds.la modules/checkers/libcheckers.la modules/compose/libcompose.la modules/drizzle/libdrizzle.la modules/flui2d/libflui2d.la modules/julia/libjulia.la modules/meta2d/libmeta2d.la modules/moire/libmoire.la modules/montage/libmontage.la modules/pixbounce/libpixbounce.la modules/plasma/libplasma.la modules/plato/libplato.la modules/ray/libray.la modules/roto/libroto.la modules/rtv/librtv.la modules/shapes/libshapes.la modules/snow/libsnow.la modules/sparkler/libsparkler.la modules/spiro/libspiro.la modules/stars/libstars.la modules/strobe/libstrobe.la modules/submit/libsubmit.la modules/swab/libswab.la modules/swarm/libswarm.la modules/voronoi/libvoronoi.la libs/grid/libgrid.la libs/puddle/libpuddle.la libs/ray/libray.la libs/sig/libsig.la libs/txt/libtxt.la libs/ascii/libascii.la libs/din/libdin.la diff --git a/src/til_jenkins.c b/src/til_jenkins.c new file mode 100644 index 0000000..0bc74ba --- /dev/null +++ b/src/til_jenkins.c @@ -0,0 +1,26 @@ +#include +#include + +#include "til_jenkins.h" + +/* we just need something to hash paths/names, it's not super perf sensitive since + * the hashes will be cached @ path/name intialization (they don't change). + */ + +/* simple "one at a time" variant from https://en.wikipedia.org/wiki/Jenkins_hash_function */ +uint32_t til_jenkins(const uint8_t *key, size_t length) +{ + uint32_t hash = 0; + + for (size_t i = 0; i < length; i++) { + hash += key[i]; + hash += hash << 10; + hash ^= hash >> 6; + } + + hash += hash << 3; + hash ^= hash >> 11; + hash += hash << 15; + + return hash; +} diff --git a/src/til_jenkins.h b/src/til_jenkins.h new file mode 100644 index 0000000..02d5015 --- /dev/null +++ b/src/til_jenkins.h @@ -0,0 +1,9 @@ +#ifndef _TIL_JENKINS_H +#define _TIL_JENKINS_H + +#include +#include + +uint32_t til_jenkins(const uint8_t *key, size_t length); + +#endif -- cgit v1.2.1