Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

57 rader
1.9 KiB

  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);