Skip to content

Instantly share code, notes, and snippets.

@abhi-bit
Created January 7, 2016 17:11
Show Gist options
  • Save abhi-bit/90d6c73bfff410ea800f to your computer and use it in GitHub Desktop.
Save abhi-bit/90d6c73bfff410ea800f to your computer and use it in GitHub Desktop.
ERL_NIF_TERM
merger_nif_heap_put(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
{
merger_nif_heap_t* mh = NULL;
ErlNifBinary keyBin, valBin;
int ret;
merger_item_t* item = (merger_item_t *) enif_alloc(sizeof(merger_item_t));
if (!item)
return merger_make_error(env, MERGER_ATOM_INTERNAL_ERROR);
item->env = enif_alloc_env();
if(!item->env) {
enif_free(item);
return 0;
}
item->key = (sized_buf *) enif_alloc(sizeof(sized_buf));
item->val = (sized_buf *) enif_alloc(sizeof(sized_buf));
if (argc != 3)
return enif_make_badarg(env);
if (!enif_get_resource(env, argv[0], MERGER_NIF_RES, (void**) &mh))
return enif_make_badarg(env);
if (!enif_inspect_iolist_as_binary(env, argv[1], &keyBin))
return enif_make_badarg(env);
if (!enif_inspect_iolist_as_binary(env, argv[2], &valBin))
return enif_make_badarg(env);
item->key->buf = (char *) keyBin.data;
item->key->size = keyBin.size;
item->val->buf = (char *) valBin.data;
item->val->size = valBin.size;
ret = heap_put(mh->hp, item);
if(ret) {
mh->size++;
return MERGER_ATOM_OK;
} else {
merger_item_destroy(item);
return merger_make_error(env, MERGER_ATOM_INTERNAL_ERROR);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment