Graphviz 2.29.20120208.0545
lib/cdt/dtextract.c
Go to the documentation of this file.
00001 #include        "dthdr.h"
00002 
00003 /*      Extract objects of a dictionary.
00004 **
00005 **      Written by Kiem-Phong Vo (5/25/96).
00006 */
00007 
00008 #if __STD_C
00009 Dtlink_t* dtextract(reg Dt_t* dt)
00010 #else
00011 Dtlink_t* dtextract(dt)
00012 reg Dt_t*       dt;
00013 #endif
00014 {
00015         reg Dtlink_t    *list, **s, **ends;
00016 
00017         if(dt->data->type&(DT_OSET|DT_OBAG) )
00018                 list = dt->data->here;
00019         else if(dt->data->type&(DT_SET|DT_BAG))
00020         {       list = dtflatten(dt);
00021                 for(ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s)
00022                         *s = NIL(Dtlink_t*);
00023         }
00024         else /*if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE))*/
00025         {       list = dt->data->head;
00026                 dt->data->head = NIL(Dtlink_t*);
00027         }
00028 
00029         dt->data->type &= ~DT_FLATTEN;
00030         dt->data->size = 0;
00031         dt->data->here = NIL(Dtlink_t*);
00032 
00033         return list;
00034 }