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.

88 line
3.2 KiB

  1. // This file is part of Jiffy released under the MIT license.
  2. // See the LICENSE file for more information.
  3. #ifndef JIFFY_H
  4. #define JIFFY_H
  5. #include "erl_nif.h"
  6. #define DEFAULT_BYTES_PER_REDUCTION 20
  7. #define DEFAULT_ERLANG_REDUCTION_COUNT 2000
  8. #define MAP_TYPE_PRESENT \
  9. ((ERL_NIF_MAJOR_VERSION == 2 && ERL_NIF_MINOR_VERSION >= 6) \
  10. || (ERL_NIF_MAJOR_VERSION > 2))
  11. #define CONSUME_TIMESLICE_PRESENT \
  12. ((ERL_NIF_MAJOR_VERSION >= 2 && ERL_NIF_MINOR_VERSION >= 4))
  13. #define SCHEDULE_NIF_PRESENT \
  14. ((ERL_NIF_MAJOR_VERSION >= 2 && ERL_NIF_MINOR_VERSION >= 7))
  15. typedef struct {
  16. ERL_NIF_TERM atom_ok;
  17. ERL_NIF_TERM atom_error;
  18. ERL_NIF_TERM atom_null;
  19. ERL_NIF_TERM atom_true;
  20. ERL_NIF_TERM atom_false;
  21. ERL_NIF_TERM atom_bignum;
  22. ERL_NIF_TERM atom_bignum_e;
  23. ERL_NIF_TERM atom_bigdbl;
  24. ERL_NIF_TERM atom_partial;
  25. ERL_NIF_TERM atom_uescape;
  26. ERL_NIF_TERM atom_pretty;
  27. ERL_NIF_TERM atom_force_utf8;
  28. ERL_NIF_TERM atom_iter;
  29. ERL_NIF_TERM atom_bytes_per_iter;
  30. ERL_NIF_TERM atom_bytes_per_red;
  31. ERL_NIF_TERM atom_return_maps;
  32. ERL_NIF_TERM atom_return_trailer;
  33. ERL_NIF_TERM atom_has_trailer;
  34. ERL_NIF_TERM atom_nil;
  35. ERL_NIF_TERM atom_use_nil;
  36. ERL_NIF_TERM atom_null_term;
  37. ERL_NIF_TERM atom_escape_forward_slashes;
  38. ERL_NIF_TERM atom_dedupe_keys;
  39. ERL_NIF_TERM atom_copy_strings;
  40. ERL_NIF_TERM ref_object;
  41. ERL_NIF_TERM ref_array;
  42. ErlNifResourceType* res_dec;
  43. ErlNifResourceType* res_enc;
  44. } jiffy_st;
  45. ERL_NIF_TERM make_atom(ErlNifEnv* env, const char* name);
  46. ERL_NIF_TERM make_ok(jiffy_st* st, ErlNifEnv* env, ERL_NIF_TERM data);
  47. ERL_NIF_TERM make_error(jiffy_st* st, ErlNifEnv* env, const char* error);
  48. ERL_NIF_TERM make_obj_error(jiffy_st* st, ErlNifEnv* env, const char* error,
  49. ERL_NIF_TERM obj);
  50. int get_bytes_per_iter(ErlNifEnv* env, ERL_NIF_TERM val, size_t* bpi);
  51. int get_bytes_per_red(ErlNifEnv* env, ERL_NIF_TERM val, size_t* bpr);
  52. int get_null_term(ErlNifEnv* env, ERL_NIF_TERM val, ERL_NIF_TERM *null_term);
  53. int should_yield(size_t used, size_t bytes_per_red);
  54. void bump_used_reds(ErlNifEnv* env, size_t used, size_t bytes_per_red);
  55. ERL_NIF_TERM decode_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
  56. ERL_NIF_TERM decode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
  57. ERL_NIF_TERM encode_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
  58. ERL_NIF_TERM encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
  59. void dec_destroy(ErlNifEnv* env, void* obj);
  60. void enc_destroy(ErlNifEnv* env, void* obj);
  61. int make_object(ErlNifEnv* env, ERL_NIF_TERM pairs, ERL_NIF_TERM* out,
  62. int ret_map, int dedupe_keys);
  63. int int_from_hex(const unsigned char* p);
  64. int int_to_hex(int val, unsigned char* p);
  65. int utf8_len(int c);
  66. int utf8_esc_len(int c);
  67. int utf8_validate(unsigned char* data, size_t size);
  68. int utf8_to_unicode(unsigned char* buf, size_t size);
  69. int unicode_to_utf8(int c, unsigned char* buf);
  70. int unicode_from_pair(int hi, int lo);
  71. int unicode_uescape(int c, unsigned char* buf);
  72. int double_to_shortest(unsigned char *buf, size_t size, size_t* len, double val);
  73. #endif // Included JIFFY_H