00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #include "dthdr.h"
00018
00019 #ifdef DMALLOC
00020 #include "dmalloc.h"
00021 #endif
00022
00023
00024
00025
00026
00027
00028 #if __STD_C
00029 Dtlink_t *dtextract(reg Dt_t * dt)
00030 #else
00031 Dtlink_t *dtextract(dt)
00032 reg Dt_t *dt;
00033 #endif
00034 {
00035 reg Dtlink_t *list, **s, **ends;
00036
00037 if (dt->data->type & (DT_OSET | DT_OBAG))
00038 list = dt->data->here;
00039 else if (dt->data->type & (DT_SET | DT_BAG)) {
00040 list = dtflatten(dt);
00041 for (ends = (s = dt->data->htab) + dt->data->ntab; s < ends; ++s)
00042 *s = NIL(Dtlink_t *);
00043 } else {
00044 list = dt->data->head;
00045 dt->data->head = NIL(Dtlink_t *);
00046 }
00047
00048 dt->data->type &= ~DT_FLATTEN;
00049 dt->data->size = 0;
00050 dt->data->here = NIL(Dtlink_t *);
00051
00052 return list;
00053 }