You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: util_hash.go
    path of file: ./repos/gotosocial/vendor/github.com/cornelk/hashmap
    
    the code of the file until where you have to start completion: package hashmap

import (
	"encoding/binary"
	"fmt"
	"math/bits"
	"reflect"
	"unsafe"
)

const (
	prime1 uint64 = 11400714785074694791
	prime2 uint64 = 14029467366897019727
	prime3 uint64 = 1609587929392839161
	prime4 uint64 = 9650029242287828579
	prime5 uint64 = 2870177450012600261
)

var prime1v = prime1

/*
Copyright (c) 2016 Caleb Spare

MIT License

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, an
    
func (m *Map[Key, Value]) setDefaultHasher() {
	var key Key
	kind := reflect.ValueOf(&key).Elem().Type().Kind()

	switch kind {
	case reflect.Int, reflect.Uint, reflect.Uintptr:
		switch intSizeBytes {
		case 2:
			m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashWord))
		case 4:
			m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashDword))
		case 8:
			m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashQword))

		default:
			panic(fmt.Errorf("unsupported integer byte size %d", intSizeBytes))
		}

	case reflect.Int8, reflect.Uint8:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashByte))
	case reflect.Int16, reflect.Uint16:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashWord))
	case reflect.Int32, reflect.Uint32:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashDword))
	case reflect.Int64, reflect.Uint64:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashQword))
	case reflect.Float32:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashFloat32))
	case reflect.Float64:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashFloat64))
	case reflect.String:
		m.hasher = *(*func(Key) uintptr)(unsafe.Pointer(&xxHashString))

	default:
		panic(fmt.Errorf("unsupported key type %T of kind %v", key, kind))
	}
}