1 /* Copyright (C) 2002 Christopher Clark <firstname.lastname@cl.cam.ac.uk> */ 2 3 #include "hashtable.h" 4 #include "hashtable_private.h" 5 #include "hashtable_utility.h" 6 #include <stdlib.h> 7 #include <stdio.h> 8 #include <string.h> 9 10 /*****************************************************************************/ 11 /* hashtable_change 12 * 13 * function to change the value associated with a key, where there already 14 * exists a value bound to the key in the hashtable. 15 * Source due to Holger Schemel. 16 * 17 * */ 18 int 19 hashtable_change(struct hashtable *h, void *k, void *v) 20 { 21 struct entry *e; 22 unsigned int hashvalue, index; 23 hashvalue = hash(h,k); 24 index = indexFor(h->tablelength,hashvalue); 25 e = h->table[index]; 26 while (NULL != e) 27 { 28 /* Check hash value to short circuit heavier comparison */ 29 if ((hashvalue == e->h) && (h->eqfn(k, e->k))) 30 { 31 free(e->v); 32 e->v = v; 33 return -1; 34 } 35 e = e->next; 36 } 37 return 0; 38 } 39 40 /* 41 * Copyright (c) 2002, Christopher Clark 42 * All rights reserved. 43 * 44 * Redistribution and use in source and binary forms, with or without 45 * modification, are permitted provided that the following conditions 46 * are met: 47 * 48 * * Redistributions of source code must retain the above copyright 49 * notice, this list of conditions and the following disclaimer. 50 * 51 * * Redistributions in binary form must reproduce the above copyright 52 * notice, this list of conditions and the following disclaimer in the 53 * documentation and/or other materials provided with the distribution. 54 * 55 * * Neither the name of the original author; nor the names of any contributors 56 * may be used to endorse or promote products derived from this software 57 * without specific prior written permission. 58 * 59 * 60 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 61 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 62 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 63 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 64 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 65 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 66 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 67 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 68 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 69 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 70 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 71 */ 72