/**
* 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.couchbase.loadgen;
import java.util.Random;
/**
* Utility functions.
*/
public class Utils {
static Random random = new Random();
/**
* Generate a random ASCII string of a given length.
*/
public static String ASCIIString(int length) {
int interval = '~' - ' ' + 1;
byte[] buf = new byte[length];
random.nextBytes(buf);
for (int i = 0; i < length; i++) {
if (buf[i] < 0) {
buf[i] = (byte) ((-buf[i] % interval) + ' ');
} else {
buf[i] = (byte) ((buf[i] % interval) + ' ');
}
}
return new String(buf);
}
/**
* Hash an integer value.
*/
public static int hash(int val) {
return FNVhash32(val);
}
public static final int FNV_offset_basis_32 = 0x811c9dc5;
public static final int FNV_prime_32 = 16777619;
/**
* 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 FNVhash32(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;
// hashval = hashval ^ octet;
}
return Math.abs(hashval);
}
public static final long FNV_offset_basis_64 = 0xCBF29CE484222325L;
public static final long FNV_prime_64 = 1099511628211L;
/**
* 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 FNVhash64(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;
// hashval = hashval ^ octet;
}
return Math.abs(hashval);
}
}