static int enc_map_to_ejson(ErlNifEnv* env, ERL_NIF_TERM map, ERL_NIF_TERM* out) { ErlNifMapIterator iter; size_t size; ERL_NIF_TERM list; ERL_NIF_TERM tuple; ERL_NIF_TERM key; ERL_NIF_TERM val; if(!enif_get_map_size(env, map, &size)) { fprintf(stderr, "bad map size\r\n"); return 0; } list = enif_make_list(env, 0); if(size == 0) { *out = enif_make_list_cell(env, enif_make_tuple(env, 0), list); return 1; } if(!enif_map_iterator_create(env, map, &iter, ERL_NIF_MAP_ITERATOR_HEAD)) { fprintf(stderr, "bad iterator create\r\n"); return 0; } do { if(!enif_map_iterator_get_pair(env, &iter, &key, &val)) { fprintf(stderr, "bad get pair\r\n"); return 0; } tuple = enif_make_tuple2(env, key, val); list = enif_make_list_cell(env, tuple, list); } while(enif_map_iterator_next(env, &iter)); *out = list; return 1; }
int enc_map_to_ejson(ErlNifEnv* env, ERL_NIF_TERM map, ERL_NIF_TERM* out) { ErlNifMapIterator iter; size_t size; ERL_NIF_TERM list; ERL_NIF_TERM tuple; ERL_NIF_TERM key; ERL_NIF_TERM val; if(!enif_get_map_size(env, map, &size)) { return 0; } list = enif_make_list(env, 0); if(size == 0) { *out = enif_make_tuple1(env, list); return 1; } if(!enif_map_iterator_create(env, map, &iter, ERL_NIF_MAP_ITERATOR_HEAD)) { return 0; } do { if(!enif_map_iterator_get_pair(env, &iter, &key, &val)) { enif_map_iterator_destroy(env, &iter); return 0; } tuple = enif_make_tuple2(env, key, val); list = enif_make_list_cell(env, tuple, list); } while(enif_map_iterator_next(env, &iter)); enif_map_iterator_destroy(env, &iter); *out = enif_make_tuple1(env, list); return 1; }