|
// This file is part of Jiffy released under the MIT license.
|
|
// See the LICENSE file for more information.
|
|
|
|
#ifndef JIFFY_H
|
|
#define JIFFY_H
|
|
|
|
#include "erl_nif.h"
|
|
|
|
#define DEFAULT_BYTES_PER_REDUCTION 20
|
|
#define DEFAULT_ERLANG_REDUCTION_COUNT 2000
|
|
|
|
#define MAP_TYPE_PRESENT \
|
|
((ERL_NIF_MAJOR_VERSION == 2 && ERL_NIF_MINOR_VERSION >= 6) \
|
|
|| (ERL_NIF_MAJOR_VERSION > 2))
|
|
|
|
#define CONSUME_TIMESLICE_PRESENT \
|
|
((ERL_NIF_MAJOR_VERSION >= 2 && ERL_NIF_MINOR_VERSION >= 4))
|
|
|
|
#define SCHEDULE_NIF_PRESENT \
|
|
((ERL_NIF_MAJOR_VERSION >= 2 && ERL_NIF_MINOR_VERSION >= 7))
|
|
|
|
typedef struct {
|
|
ERL_NIF_TERM atom_ok;
|
|
ERL_NIF_TERM atom_error;
|
|
ERL_NIF_TERM atom_null;
|
|
ERL_NIF_TERM atom_true;
|
|
ERL_NIF_TERM atom_false;
|
|
ERL_NIF_TERM atom_bignum;
|
|
ERL_NIF_TERM atom_bignum_e;
|
|
ERL_NIF_TERM atom_bigdbl;
|
|
ERL_NIF_TERM atom_partial;
|
|
ERL_NIF_TERM atom_uescape;
|
|
ERL_NIF_TERM atom_pretty;
|
|
ERL_NIF_TERM atom_force_utf8;
|
|
ERL_NIF_TERM atom_iter;
|
|
ERL_NIF_TERM atom_bytes_per_iter;
|
|
ERL_NIF_TERM atom_bytes_per_red;
|
|
ERL_NIF_TERM atom_return_maps;
|
|
ERL_NIF_TERM atom_return_trailer;
|
|
ERL_NIF_TERM atom_has_trailer;
|
|
ERL_NIF_TERM atom_nil;
|
|
ERL_NIF_TERM atom_use_nil;
|
|
ERL_NIF_TERM atom_null_term;
|
|
ERL_NIF_TERM atom_escape_forward_slashes;
|
|
ERL_NIF_TERM atom_dedupe_keys;
|
|
ERL_NIF_TERM atom_copy_strings;
|
|
|
|
ERL_NIF_TERM ref_object;
|
|
ERL_NIF_TERM ref_array;
|
|
|
|
ErlNifResourceType* res_dec;
|
|
ErlNifResourceType* res_enc;
|
|
} jiffy_st;
|
|
|
|
ERL_NIF_TERM make_atom(ErlNifEnv* env, const char* name);
|
|
ERL_NIF_TERM make_ok(jiffy_st* st, ErlNifEnv* env, ERL_NIF_TERM data);
|
|
ERL_NIF_TERM make_error(jiffy_st* st, ErlNifEnv* env, const char* error);
|
|
ERL_NIF_TERM make_obj_error(jiffy_st* st, ErlNifEnv* env, const char* error,
|
|
ERL_NIF_TERM obj);
|
|
int get_bytes_per_iter(ErlNifEnv* env, ERL_NIF_TERM val, size_t* bpi);
|
|
int get_bytes_per_red(ErlNifEnv* env, ERL_NIF_TERM val, size_t* bpr);
|
|
int get_null_term(ErlNifEnv* env, ERL_NIF_TERM val, ERL_NIF_TERM *null_term);
|
|
int should_yield(size_t used, size_t bytes_per_red);
|
|
void bump_used_reds(ErlNifEnv* env, size_t used, size_t bytes_per_red);
|
|
|
|
ERL_NIF_TERM decode_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
|
|
ERL_NIF_TERM decode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
|
|
ERL_NIF_TERM encode_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
|
|
ERL_NIF_TERM encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]);
|
|
|
|
void dec_destroy(ErlNifEnv* env, void* obj);
|
|
void enc_destroy(ErlNifEnv* env, void* obj);
|
|
|
|
int make_object(ErlNifEnv* env, ERL_NIF_TERM pairs, ERL_NIF_TERM* out,
|
|
int ret_map, int dedupe_keys);
|
|
|
|
int int_from_hex(const unsigned char* p);
|
|
int int_to_hex(int val, unsigned char* p);
|
|
int utf8_len(int c);
|
|
int utf8_esc_len(int c);
|
|
int utf8_validate(unsigned char* data, size_t size);
|
|
int utf8_to_unicode(unsigned char* buf, size_t size);
|
|
int unicode_to_utf8(int c, unsigned char* buf);
|
|
int unicode_from_pair(int hi, int lo);
|
|
int unicode_uescape(int c, unsigned char* buf);
|
|
int double_to_shortest(unsigned char *buf, size_t size, size_t* len, double val);
|
|
|
|
#endif // Included JIFFY_H
|