86 |
86 |
87 int ucx_map_copy(UcxMap *restrict from, UcxMap *restrict to, |
87 int ucx_map_copy(UcxMap *restrict from, UcxMap *restrict to, |
88 copy_func fnc, void *data) { |
88 copy_func fnc, void *data) { |
89 UcxMapIterator i = ucx_map_iterator(from); |
89 UcxMapIterator i = ucx_map_iterator(from); |
90 void *value; |
90 void *value; |
91 UCX_MAP_FOREACH(value, i) { |
91 UCX_MAP_FOREACH(key, value, i) { |
92 int ret = ucx_map_put(to, i.cur->key, fnc ? fnc(value, data) : value); |
92 int ret = ucx_map_put(to, i.cur->key, fnc ? fnc(value, data) : value); |
93 if(ret != 0) { |
93 if(ret != 0) { |
94 return 1; |
94 return 1; |
95 } |
95 } |
96 } |
96 } |
400 } |
401 } |
401 |
402 |
402 int ucx_map_store_enc(UcxMap *map, FILE *f, |
403 int ucx_map_store_enc(UcxMap *map, FILE *f, |
403 ucx_map_coder encoder, void *encdata) { |
404 ucx_map_coder encoder, void *encdata) { |
404 UcxMapIterator iter = ucx_map_iterator(map); |
405 UcxMapIterator iter = ucx_map_iterator(map); |
405 char *k, *v; |
406 char *v; |
406 sstr_t key, value; |
407 sstr_t key, value; |
407 size_t written; |
408 size_t written; |
408 |
409 |
409 UCX_MAP_FOREACH(v, iter) { |
410 UCX_MAP_FOREACH(k, v, iter) { |
410 k = (char*) iter.cur->key.data; |
411 key = sstrn(k.data, k.len); |
411 key = sstrn(k, iter.cur->key.len); |
|
412 if (encoder) { |
412 if (encoder) { |
413 size_t encodedSize; |
413 size_t encodedSize; |
414 void *encoded = encoder(v, encdata, &encodedSize); |
414 void *encoded = encoder(v, encdata, &encodedSize); |
415 value = sstrn((char*) encoded,encodedSize - 1); |
415 value = sstrn((char*) encoded,encodedSize - 1); |
416 } else { |
416 } else { |