#ifndef INSERT_STRING_P_H_
#define INSERT_STRING_P_H_

/* insert_string_p.h -- insert_string function generator
 *
 * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler
 * For conditions of distribution and use, see copyright notice in zlib.h
 *
 */

// Normal insert_string, levels 1-8
#define HASH_SLIDE           16

#define HASH_CALC(h, val)    h = ((val * 2654435761U) >> HASH_SLIDE);
#define HASH_CALC_MASK       HASH_MASK
#define HASH_CALC_VAR        h
#define HASH_CALC_VAR_INIT   uint32_t h
#define HASH_CALC_OFFSET     0

#define UPDATE_HASH          update_hash
#define INSERT_STRING        insert_string_static
#define QUICK_INSERT_STRING  quick_insert_string
#define QUICK_INSERT_VALUE   quick_insert_value

#include "insert_string_tpl.h"

// Rolling insert_string, level 9
#define HASH_SLIDE           5

#define HASH_CALC(h, val)    h = ((h << HASH_SLIDE) ^ ((uint8_t)val))
#define HASH_CALC_VAR        s->ins_h
#define HASH_CALC_VAR_INIT
#define HASH_CALC_READ       val = strstart[0]
#define HASH_CALC_MASK       (32768u - 1u)
#define HASH_CALC_OFFSET     (STD_MIN_MATCH-1)

#define UPDATE_HASH          update_hash_roll
#define INSERT_STRING        insert_string_roll_static
#define QUICK_INSERT_STRING  quick_insert_string_roll
#define QUICK_INSERT_VALUE   quick_insert_value_roll

#include "insert_string_tpl.h"

#endif
