All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.hazelcast.simulator.tests.map.helpers.ZipfianUtils Maven / Gradle / Ivy

/**
 * Copyright (c) 2010 Yahoo! Inc. All rights reserved.
 * 

* Licensed under the Apache License, Version 2.0 (the "License"); you * may not use this file except in compliance with the License. You * may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

* Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing * permissions and limitations under the License. See accompanying * LICENSE file. */ package com.hazelcast.simulator.tests.map.helpers; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.util.Random; /** * Utility functions for zipfian generators. */ @SuppressWarnings("unused") final class ZipfianUtils { private static final int FNV_OFFSET_BASIS_32 = 0x811c9dc5; private static final int FNV_PRIME_32 = 16777619; private static final long FNV_OFFSET_BASIS_64 = 0xCBF29CE484222325L; private static final long FNV_PRIME_64 = 1099511628211L; private static final Random RANDOM = new Random(); private static final ThreadLocal THREAD_LOCAL_RANDOM = new ThreadLocal(); private ZipfianUtils() { } public static Random random() { Random random = THREAD_LOCAL_RANDOM.get(); if (random == null) { random = new Random(RANDOM.nextLong()); THREAD_LOCAL_RANDOM.set(random); } return random; } /** * Generate a random ASCII string of a given length. */ @SuppressFBWarnings("DM_DEFAULT_ENCODING") public static String generateASCIIString(int length) { int interval = '~' - ' ' + 1; byte[] buffer = new byte[length]; random().nextBytes(buffer); for (int i = 0; i < length; i++) { if (buffer[i] < 0) { buffer[i] = (byte) ((-buffer[i] % interval) + ' '); } else { buffer[i] = (byte) ((buffer[i] % interval) + ' '); } } return new String(buffer); } /** * Hash an integer value. */ public static long hash(long val) { return hashFNV64(val); } /** * 32 bit FNV hash. Produces more "random" hashes than (say) String.hashCode(). * * @param val The value to hash. * @return The hash value */ public static int hashFNV32(int val) { // from http://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash int hashVal = FNV_OFFSET_BASIS_32; for (int i = 0; i < 4; i++) { int octet = val & 0x00ff; val = val >> 8; hashVal = hashVal ^ octet; hashVal = hashVal * FNV_PRIME_32; } return Math.abs(hashVal); } /** * 64 bit FNV hash. Produces more "random" hashes than (say) String.hashCode(). * * @param val The value to hash. * @return The hash value */ public static long hashFNV64(long val) { // from http://en.wikipedia.org/wiki/Fowler_Noll_Vo_hash long hashVal = FNV_OFFSET_BASIS_64; for (int i = 0; i < 8; i++) { long octet = val & 0x00ff; val = val >> 8; hashVal = hashVal ^ octet; hashVal = hashVal * FNV_PRIME_64; } return Math.abs(hashVal); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy