You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

59 lines
1.9 KiB

пре 15 година
пре 13 година
пре 15 година
пре 15 година
пре 15 година
пре 15 година
пре 15 година
пре 15 година
пре 15 година
пре 13 година
пре 15 година
  1. #include "erl_nif.h"
  2. static ErlNifResourceType* {{module}}_RESOURCE = NULL;
  3. typedef struct
  4. {
  5. } {{module}}_handle;
  6. // Prototypes
  7. static ERL_NIF_TERM {{module}}_new(ErlNifEnv* env, int argc,
  8. const ERL_NIF_TERM argv[]);
  9. static ERL_NIF_TERM {{module}}_myfunction(ErlNifEnv* env, int argc,
  10. const ERL_NIF_TERM argv[]);
  11. static ErlNifFunc nif_funcs[] =
  12. {
  13. {"new", 0, {{module}}_new},
  14. {"myfunction", 1, {{module}}_myfunction}
  15. };
  16. static ERL_NIF_TERM {{module}}_new(ErlNifEnv* env, int argc,
  17. const ERL_NIF_TERM argv[])
  18. {
  19. {{module}}_handle* handle = enif_alloc_resource({{module}}_RESOURCE,
  20. sizeof({{module}}_handle));
  21. ERL_NIF_TERM result = enif_make_resource(env, handle);
  22. enif_release_resource(handle);
  23. return enif_make_tuple2(env, enif_make_atom(env, "ok"), result);
  24. }
  25. static ERL_NIF_TERM {{module}}_myfunction(ErlNifEnv* env, int argc,
  26. const ERL_NIF_TERM argv[])
  27. {
  28. return enif_make_atom(env, "ok");
  29. }
  30. static void {{module}}_resource_cleanup(ErlNifEnv* env, void* arg)
  31. {
  32. /* Delete any dynamically allocated memory stored in {{module}}_handle */
  33. /* {{module}}_handle* handle = ({{module}}_handle*)arg; */
  34. }
  35. static int on_load(ErlNifEnv* env, void** priv_data, ERL_NIF_TERM load_info)
  36. {
  37. ErlNifResourceFlags flags = ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER;
  38. ErlNifResourceType* rt = enif_open_resource_type(env, NULL,
  39. "{{module}}_resource",
  40. &{{module}}_resource_cleanup,
  41. flags, NULL);
  42. if (rt == NULL)
  43. return -1;
  44. {{module}}_RESOURCE = rt;
  45. return 0;
  46. }
  47. ERL_NIF_INIT({{module}}, nif_funcs, &on_load, NULL, NULL, NULL);