| /* $Id$ | |
| * | |
| * Licensed to the Apache Software Foundation (ASF) under one or more | |
| * contributor license agreements. See the NOTICE file distributed with | |
| * this work for additional information regarding copyright ownership. | |
| * The ASF licenses this file to you 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. | |
| */ | |
| /* | |
| * hashfunc.c -- implementation of a hash function. | |
| * we use the hash function from the jenkins hashtable. | |
| */ | |
| #include "etch.h" | |
| #include "jenklook.h" | |
| /** | |
| * etchhash -- global method to hash an arbitrary byte string to 32 bits. | |
| * note that keylen is the key byte length, not string length, as these of | |
| * course differ for unicode. | |
| * priorhash is result of the previous operation, or any arbitrary value -- | |
| * see jenkin's comments below for an example. | |
| * returns hash of the supplied key, as used by the jenkins hashtable, | |
| * or zero if parameters were in error. | |
| * | |
| * jenkins' comments: if you need less than 32 bits, use a bitmask. | |
| * for example, if you need only 10 bits, do h = (h & hashmask(10)), | |
| * in which case, the hash table should have hashsize(10) elements. | |
| * if you are hashing n strings (unsigned char**)k, do it like this: | |
| * for (i=0, h=0; i < n; ++i) h = lookup(k[i], len[i], h); | |
| */ | |
| unsigned etchhash(const void* pkey, const int keylen, const unsigned priorhash) | |
| { /* jenkhash.lib */ | |
| if (!pkey || keylen < 1 || keylen > MAX_ETCHHASHKEY) return 0; | |
| return lookup((ub1*)pkey, keylen, priorhash); | |
| } | |