Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

59 рядки
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);