1*b30d1939SAndy Fiddaman /*********************************************************************** 2*b30d1939SAndy Fiddaman * * 3*b30d1939SAndy Fiddaman * This software is part of the ast package * 4*b30d1939SAndy Fiddaman * Copyright (c) 1985-2011 AT&T Intellectual Property * 5*b30d1939SAndy Fiddaman * and is licensed under the * 6*b30d1939SAndy Fiddaman * Eclipse Public License, Version 1.0 * 7*b30d1939SAndy Fiddaman * by AT&T Intellectual Property * 8*b30d1939SAndy Fiddaman * * 9*b30d1939SAndy Fiddaman * A copy of the License is available at * 10*b30d1939SAndy Fiddaman * http://www.eclipse.org/org/documents/epl-v10.html * 11*b30d1939SAndy Fiddaman * (with md5 checksum b35adb5213ca9657e911e9befb180842) * 12*b30d1939SAndy Fiddaman * * 13*b30d1939SAndy Fiddaman * Information and Software Systems Research * 14*b30d1939SAndy Fiddaman * AT&T Research * 15*b30d1939SAndy Fiddaman * Florham Park NJ * 16*b30d1939SAndy Fiddaman * * 17*b30d1939SAndy Fiddaman * Glenn Fowler <gsf@research.att.com> * 18*b30d1939SAndy Fiddaman * David Korn <dgk@research.att.com> * 19*b30d1939SAndy Fiddaman * Phong Vo <kpv@research.att.com> * 20*b30d1939SAndy Fiddaman * * 21*b30d1939SAndy Fiddaman ***********************************************************************/ 22*b30d1939SAndy Fiddaman #pragma prototyped 23*b30d1939SAndy Fiddaman /* 24*b30d1939SAndy Fiddaman * Glenn Fowler 25*b30d1939SAndy Fiddaman * AT&T Bell Laboratories 26*b30d1939SAndy Fiddaman * 27*b30d1939SAndy Fiddaman * hash table library 28*b30d1939SAndy Fiddaman */ 29*b30d1939SAndy Fiddaman 30*b30d1939SAndy Fiddaman #include "hashlib.h" 31*b30d1939SAndy Fiddaman 32*b30d1939SAndy Fiddaman /* 33*b30d1939SAndy Fiddaman * push/pop/query hash table scope 34*b30d1939SAndy Fiddaman * 35*b30d1939SAndy Fiddaman * bot==0 pop top scope 36*b30d1939SAndy Fiddaman * bot==top query 37*b30d1939SAndy Fiddaman * bot!=0 push top on bot 38*b30d1939SAndy Fiddaman * 39*b30d1939SAndy Fiddaman * scope table pointer returned 40*b30d1939SAndy Fiddaman */ 41*b30d1939SAndy Fiddaman 42*b30d1939SAndy Fiddaman Hash_table_t* hashview(Hash_table_t * top,Hash_table_t * bot)43*b30d1939SAndy Fiddamanhashview(Hash_table_t* top, Hash_table_t* bot) 44*b30d1939SAndy Fiddaman { 45*b30d1939SAndy Fiddaman register Hash_bucket_t* b; 46*b30d1939SAndy Fiddaman register Hash_bucket_t* p; 47*b30d1939SAndy Fiddaman register Hash_bucket_t** sp; 48*b30d1939SAndy Fiddaman register Hash_bucket_t** sx; 49*b30d1939SAndy Fiddaman 50*b30d1939SAndy Fiddaman if (!top || top->frozen) 51*b30d1939SAndy Fiddaman bot = 0; 52*b30d1939SAndy Fiddaman else if (top == bot) 53*b30d1939SAndy Fiddaman bot = top->scope; 54*b30d1939SAndy Fiddaman else if (bot) 55*b30d1939SAndy Fiddaman { 56*b30d1939SAndy Fiddaman if (top->scope) 57*b30d1939SAndy Fiddaman bot = 0; 58*b30d1939SAndy Fiddaman else 59*b30d1939SAndy Fiddaman { 60*b30d1939SAndy Fiddaman sx = &top->table[top->size]; 61*b30d1939SAndy Fiddaman sp = &top->table[0]; 62*b30d1939SAndy Fiddaman while (sp < sx) 63*b30d1939SAndy Fiddaman for (b = *sp++; b; b = b->next) 64*b30d1939SAndy Fiddaman if (p = (Hash_bucket_t*)hashlook(bot, b->name, HASH_LOOKUP, NiL)) 65*b30d1939SAndy Fiddaman { 66*b30d1939SAndy Fiddaman b->name = (p->hash & HASH_HIDES) ? p->name : (char*)b; 67*b30d1939SAndy Fiddaman b->hash |= HASH_HIDES; 68*b30d1939SAndy Fiddaman } 69*b30d1939SAndy Fiddaman top->scope = bot; 70*b30d1939SAndy Fiddaman bot->frozen++; 71*b30d1939SAndy Fiddaman } 72*b30d1939SAndy Fiddaman } 73*b30d1939SAndy Fiddaman else if (bot = top->scope) 74*b30d1939SAndy Fiddaman { 75*b30d1939SAndy Fiddaman sx = &top->table[top->size]; 76*b30d1939SAndy Fiddaman sp = &top->table[0]; 77*b30d1939SAndy Fiddaman while (sp < sx) 78*b30d1939SAndy Fiddaman for (b = *sp++; b; b = b->next) 79*b30d1939SAndy Fiddaman if (b->hash & HASH_HIDES) 80*b30d1939SAndy Fiddaman { 81*b30d1939SAndy Fiddaman b->hash &= ~HASH_HIDES; 82*b30d1939SAndy Fiddaman b->name = ((Hash_bucket_t*)b->name)->name; 83*b30d1939SAndy Fiddaman } 84*b30d1939SAndy Fiddaman top->scope = 0; 85*b30d1939SAndy Fiddaman bot->frozen--; 86*b30d1939SAndy Fiddaman } 87*b30d1939SAndy Fiddaman return(bot); 88*b30d1939SAndy Fiddaman } 89