| 1 | #include "dthdr.h" |
|---|---|
| 2 | |
| 3 | /* Return the # of objects in the dictionary |
| 4 | ** |
| 5 | ** Written by Kiem-Phong Vo (5/25/96) |
| 6 | */ |
| 7 | |
| 8 | static int treecount(reg Dtlink_t* e) |
| 9 | { return e ? treecount(e->left) + treecount(e->right) + 1 : 0; |
| 10 | } |
| 11 | |
| 12 | int dtsize(Dt_t* dt) |
| 13 | { |
| 14 | reg Dtlink_t* t; |
| 15 | reg int size; |
| 16 | |
| 17 | UNFLATTEN(dt); |
| 18 | |
| 19 | if(dt->data->size < 0) /* !(dt->data->type&(DT_SET|DT_BAG)) */ |
| 20 | { if(dt->data->type&(DT_OSET|DT_OBAG)) |
| 21 | dt->data->size = treecount(dt->data->here); |
| 22 | else if(dt->data->type&(DT_LIST|DT_STACK|DT_QUEUE)) |
| 23 | { for(size = 0, t = dt->data->head; t; t = t->right) |
| 24 | size += 1; |
| 25 | dt->data->size = size; |
| 26 | } |
| 27 | } |
| 28 | |
| 29 | return dt->data->size; |
| 30 | } |
| 31 |