diff options
author | Loïc Hoguin <[email protected]> | 2017-12-20 14:28:49 +0100 |
---|---|---|
committer | Loïc Hoguin <[email protected]> | 2017-12-20 14:28:49 +0100 |
commit | ad0f2974c7af51e4dea8b887c1c70c82f1a4599d (patch) | |
tree | dc3c44bdcb30aab9d30a7a496de56dd15e697c1a | |
parent | ead6adc15fca3c314351523080d2ccb1956d5956 (diff) | |
download | nif_helpers-ad0f2974c7af51e4dea8b887c1c70c82f1a4599d.tar.gz nif_helpers-ad0f2974c7af51e4dea8b887c1c70c82f1a4599d.tar.bz2 nif_helpers-ad0f2974c7af51e4dea8b887c1c70c82f1a4599d.zip |
Remove NIF_RES*_DEP and add a NIF_RES_TO_PTR_AND_TERM
A registry based dependency handling works better and
is more useful than a half-assed single pointer dep.
-rw-r--r-- | nif_helpers.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/nif_helpers.h b/nif_helpers.h index 2eefec6..eb5fcf5 100644 --- a/nif_helpers.h +++ b/nif_helpers.h @@ -53,21 +53,23 @@ void dtor_ ## r(ErlNifEnv*, void*); \ typedef struct { \ NIF_RES_TYPE(r)* v; \ - void* dep; \ } obj_ ## r; #define NIF_RES_INIT(r) \ res_ ## r = enif_open_resource_type(env, NULL, TO_STRING(NIF_RES_TYPE(r)), dtor_ ## r, ERL_NIF_RT_CREATE, NULL); \ if (!res_ ## r) return -1; #define NIF_RES_GET(r, obj) (((obj_ ## r*)obj)->v) -#define NIF_RES_DEP(r, obj) (((obj_ ## r*)obj)->dep) -#define NIF_RES_TO_TERM(r, val, term) NIF_RES_TO_TERM_WITH_DEP(r, val, term, NULL) -#define NIF_RES_TO_TERM_WITH_DEP(r, val, term, dep_res) { \ - obj_ ## r* res = enif_alloc_resource(res_ ## r, sizeof(obj_ ## r)); \ - res->v = val; \ - res->dep = dep_res; \ - term = enif_make_resource(env, res); \ - enif_release_resource(res); \ +#define NIF_RES_TO_TERM(r, val, term) { \ + obj_ ## r* ptr = enif_alloc_resource(res_ ## r, sizeof(obj_ ## r)); \ + ptr->v = val; \ + term = enif_make_resource(env, ptr); \ + enif_release_resource(ptr); \ +} +#define NIF_RES_TO_PTR_AND_TERM(r, val, ptr, term) { \ + ptr = enif_alloc_resource(res_ ## r, sizeof(obj_ ## r)); \ + ptr->v = val; \ + term = enif_make_resource(env, ptr); \ + enif_release_resource(ptr); \ } // Function generators. |