static bool iterator_map_nextpair(Iterator *iter, void *pkey, void *pval) { MapIterator *miter = (MapIterator*)iter; MapIter mi = miter->mi; *((void**)pkey) = mi->key; *((void**)pval) = mi->value; if (miter->finis) { miter->mi = NULL; return false; } miter->finis = map_iter_next(mi) == NULL; return true; }
static void free_prices(map_t *contracts) { map_iter_t *iter = map_iter_create(); for (map_begin(iter, contracts); map_iter_valid(iter, contracts); map_iter_next(iter)) { void *contract = (void *)map_iter_key(iter); deq_t *prices = map_iter_value(iter); int i, size = deq_size(prices); FREE(contract); for (i = 0; i < size; ++i) { float *price = deq_at(prices, i); FREE(price); } deq_destroy(prices); } map_iter_destroy(iter); }