dtextract.c 600 B

123456789101112131415161718192021222324252627282930
  1. #include <cdt/dthdr.h>
  2. #include <stddef.h>
  3. /* Extract objects of a dictionary.
  4. **
  5. ** Written by Kiem-Phong Vo (5/25/96).
  6. */
  7. Dtlink_t* dtextract(Dt_t* dt)
  8. {
  9. Dtlink_t *list, **s, **ends;
  10. if(dt->data->type&(DT_OSET|DT_OBAG) )
  11. list = dt->data->here;
  12. else if(dt->data->type&DT_SET)
  13. { list = dtflatten(dt);
  14. for(ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s)
  15. *s = NULL;
  16. }
  17. else /*if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE))*/
  18. { list = dt->data->head;
  19. dt->data->head = NULL;
  20. }
  21. dt->data->type &= ~DT_FLATTEN;
  22. dt->data->size = 0;
  23. dt->data->here = NULL;
  24. return list;
  25. }