hashwalk.c revision 7c2fbfb345896881c631598ee3852ce9ce33fb07
0N/A/***********************************************************************
196N/A* *
0N/A* This software is part of the ast package *
0N/A* Copyright (c) 1985-2008 AT&T Intellectual Property *
0N/A* and is licensed under the *
0N/A* Common Public License, Version 1.0 *
0N/A* by AT&T Intellectual Property *
0N/A* *
0N/A* A copy of the License is available at *
0N/A* http://www.opensource.org/licenses/cpl1.0.txt *
0N/A* (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) *
0N/A* *
0N/A* Information and Software Systems Research *
0N/A* AT&T Research *
0N/A* Florham Park NJ *
0N/A* *
0N/A* Glenn Fowler <gsf@research.att.com> *
0N/A* David Korn <dgk@research.att.com> *
0N/A* Phong Vo <kpv@research.att.com> *
0N/A* *
0N/A***********************************************************************/
0N/A#pragma prototyped
0N/A/*
0N/A * Glenn Fowler
0N/A * AT&T Research
0N/A *
0N/A * hash table library
0N/A */
0N/A
0N/A#include "hashlib.h"
0N/A
0N/A/*
0N/A * apply walker to each active bucket in the table
0N/A */
0N/A
113N/Aint
113N/Ahashwalk(Hash_table_t* tab, int flags, register int (*walker)(const char*, char*, void*), void* handle)
113N/A{
167N/A register Hash_bucket_t* b;
167N/A register int v;
167N/A Hash_position_t* pos;
167N/A
167N/A if (!(pos = hashscan(tab, flags)))
167N/A return(-1);
167N/A v = 0;
167N/A while (b = hashnext(pos))
167N/A if ((v = (*walker)(hashname(b), (tab->flags & HASH_VALUE) ? b->value : (char*)b, handle)) < 0)
113N/A break;
113N/A hashdone(pos);
113N/A return(v);
113N/A}
113N/A