Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

94 rindas
2.7 KiB

pirms 13 gadiem
  1. // This file is part of Jiffy released under the MIT license.
  2. // See the LICENSE file for more information.
  3. #include "jiffy.h"
  4. static int
  5. load(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
  6. {
  7. jiffy_st* st = enif_alloc(sizeof(jiffy_st));
  8. if(st == NULL) {
  9. return 1;
  10. }
  11. st->atom_ok = make_atom(env, "ok");
  12. st->atom_error = make_atom(env, "error");
  13. st->atom_null = make_atom(env, "null");
  14. st->atom_true = make_atom(env, "true");
  15. st->atom_false = make_atom(env, "false");
  16. st->atom_bignum = make_atom(env, "bignum");
  17. st->atom_bignum_e = make_atom(env, "bignum_e");
  18. st->atom_bigdbl = make_atom(env, "bigdbl");
  19. st->atom_partial = make_atom(env, "partial");
  20. st->atom_uescape = make_atom(env, "uescape");
  21. st->atom_pretty = make_atom(env, "pretty");
  22. st->atom_force_utf8 = make_atom(env, "force_utf8");
  23. st->atom_iter = make_atom(env, "iter");
  24. st->atom_truncated = make_atom(env, "truncated");
  25. st->atom_bytes_per_iter = make_atom(env, "bytes_per_iter");
  26. st->atom_return_maps = make_atom(env, "return_maps");
  27. st->atom_return_trailer = make_atom(env, "return_trailer");
  28. st->atom_return_truncated = make_atom(env, "return_truncated");
  29. st->atom_has_trailer = make_atom(env, "has_trailer");
  30. st->atom_nil = make_atom(env, "nil");
  31. st->atom_use_nil = make_atom(env, "use_nil");
  32. st->atom_null_term = make_atom(env, "null_term");
  33. st->atom_escape_forward_slashes = make_atom(env, "escape_forward_slashes");
  34. st->atom_dedupe_keys = make_atom(env, "dedupe_keys");
  35. st->atom_copy_strings = make_atom(env, "copy_strings");
  36. // Markers used in encoding
  37. st->ref_object = make_atom(env, "$object_ref$");
  38. st->ref_array = make_atom(env, "$array_ref$");
  39. st->res_dec = enif_open_resource_type(
  40. env,
  41. NULL,
  42. "decoder",
  43. dec_destroy,
  44. ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER,
  45. NULL
  46. );
  47. st->res_enc = enif_open_resource_type(
  48. env,
  49. NULL,
  50. "encoder",
  51. enc_destroy,
  52. ERL_NIF_RT_CREATE | ERL_NIF_RT_TAKEOVER,
  53. NULL
  54. );
  55. *priv = (void*) st;
  56. return 0;
  57. }
  58. static int
  59. reload(ErlNifEnv* env, void** priv, ERL_NIF_TERM info)
  60. {
  61. return 0;
  62. }
  63. static int
  64. upgrade(ErlNifEnv* env, void** priv, void** old_priv, ERL_NIF_TERM info)
  65. {
  66. return load(env, priv, info);
  67. }
  68. static void
  69. unload(ErlNifEnv* env, void* priv)
  70. {
  71. enif_free(priv);
  72. return;
  73. }
  74. static ErlNifFunc funcs[] =
  75. {
  76. {"nif_decode_init", 2, decode_init},
  77. {"nif_decode_iter", 5, decode_iter},
  78. {"nif_encode_init", 2, encode_init},
  79. {"nif_encode_iter", 3, encode_iter}
  80. };
  81. ERL_NIF_INIT(jiffy, funcs, &load, &reload, &upgrade, &unload);