Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

57 строки
1.9 KiB

15 лет назад
15 лет назад
15 лет назад
15 лет назад
15 лет назад
15 лет назад
15 лет назад
15 лет назад
  1. #include "erl_nif.h"
  2. static ErlNifResourceType* {{module}}_RESOURCE;
  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. return 0;
  45. }
  46. ERL_NIF_INIT({{module}}, nif_funcs, &on_load, NULL, NULL, NULL);