1 /*********************************************************************** 2 * * 3 * This software is part of the ast package * 4 * Copyright (c) 1985-2008 AT&T Intellectual Property * 5 * and is licensed under the * 6 * Common Public License, Version 1.0 * 7 * by AT&T Intellectual Property * 8 * * 9 * A copy of the License is available at * 10 * http://www.opensource.org/licenses/cpl1.0.txt * 11 * (with md5 checksum 059e8cd6165cb4c31e351f2b69388fd9) * 12 * * 13 * Information and Software Systems Research * 14 * AT&T Research * 15 * Florham Park NJ * 16 * * 17 * Glenn Fowler <gsf@research.att.com> * 18 * David Korn <dgk@research.att.com> * 19 * Phong Vo <kpv@research.att.com> * 20 * * 21 ***********************************************************************/ 22 #include "dthdr.h" 23 24 /* Extract objects of a dictionary. 25 ** 26 ** Written by Kiem-Phong Vo (5/25/96). 27 */ 28 29 #if __STD_C 30 Dtlink_t* dtextract(reg Dt_t* dt) 31 #else 32 Dtlink_t* dtextract(dt) 33 reg Dt_t* dt; 34 #endif 35 { 36 reg Dtlink_t *list, **s, **ends; 37 38 if(dt->data->type&(DT_OSET|DT_OBAG) ) 39 list = dt->data->here; 40 else if(dt->data->type&(DT_SET|DT_BAG)) 41 { list = dtflatten(dt); 42 for(ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s) 43 *s = NIL(Dtlink_t*); 44 } 45 else /*if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE))*/ 46 { list = dt->data->head; 47 dt->data->head = NIL(Dtlink_t*); 48 } 49 50 dt->data->type &= ~DT_FLATTEN; 51 dt->data->size = 0; 52 dt->data->here = NIL(Dtlink_t*); 53 54 return list; 55 } 56