Ver a proveniência

fixed issue 162 regarding duplicate keys in objects

pull/163/head
Lynn Gabbay há 7 anos
ascendente
cometimento
2a15f98573
1 ficheiros alterados com 11 adições e 2 eliminações
  1. +11
    -2
      c_src/objects.cc

+ 11
- 2
c_src/objects.cc Ver ficheiro

@ -25,6 +25,8 @@ make_object(ErlNifEnv* env, ERL_NIF_TERM pairs, ERL_NIF_TERM* out,
ERL_NIF_TERM key;
ERL_NIF_TERM val;
std::set<std::string> seen;
#if MAP_TYPE_PRESENT
if(ret_map) {
ret = enif_make_new_map(env);
@ -32,16 +34,23 @@ make_object(ErlNifEnv* env, ERL_NIF_TERM pairs, ERL_NIF_TERM* out,
if(!enif_get_list_cell(env, pairs, &key, &pairs)) {
assert(0 == 1 && "Unbalanced object pairs.");
}
if(!enif_make_map_put(env, ret, key, val, &ret)) {
ErlNifBinary bin;
if(!enif_inspect_binary(env, key, &bin)) {
return 0;
}
std::string skey((char*) bin.data, bin.size);
if(seen.count(skey) == 0) {
seen.insert(skey);
if(!enif_make_map_put(env, ret, key, val, &ret)) {
return 0;
}
}
}
*out = ret;
return 1;
}
#endif
std::set<std::string> seen;
ret = enif_make_list(env, 0);
while(enif_get_list_cell(env, pairs, &val, &pairs)) {
if(!enif_get_list_cell(env, pairs, &key, &pairs)) {

Carregando…
Cancelar
Guardar