@ -29,7 +29,7 @@ typedef struct {
ErlNifEnv * env ;
ErlNifEnv * env ;
jiffy_st * atoms ;
jiffy_st * atoms ;
size_t bytes_per_iter ;
size_t bytes_per_red ;
int uescape ;
int uescape ;
int pretty ;
int pretty ;
@ -74,7 +74,7 @@ enc_new(ErlNifEnv* env)
Encoder * e = enif_alloc_resource ( st - > res_enc , sizeof ( Encoder ) ) ;
Encoder * e = enif_alloc_resource ( st - > res_enc , sizeof ( Encoder ) ) ;
e - > atoms = st ;
e - > atoms = st ;
e - > bytes_per_iter = DEFAULT_BYTES_PER_ITER ;
e - > bytes_per_red = DEFAULT_BYTES_PER_REDUCTION ;
e - > uescape = 0 ;
e - > uescape = 0 ;
e - > pretty = 0 ;
e - > pretty = 0 ;
e - > use_nil = 0 ;
e - > use_nil = 0 ;
@ -200,7 +200,7 @@ enc_unknown(Encoder* e, ERL_NIF_TERM value)
e - > iolist = enif_make_list_cell ( e - > env , value , e - > iolist ) ;
e - > iolist = enif_make_list_cell ( e - > env , value , e - > iolist ) ;
e - > iolen + + ;
e - > iolen + + ;
/ / Track the total number of bytes produced before
/ / Track the total number of bytes produced before
/ / splitting our IO buffer . We add 16 to this value
/ / splitting our IO buffer . We add 16 to this value
/ / as a rough estimate of the number of bytes that
/ / as a rough estimate of the number of bytes that
@ -221,7 +221,7 @@ enc_unknown(Encoder* e, ERL_NIF_TERM value)
e - > p = ( char * ) e - > curr - > data ;
e - > p = ( char * ) e - > curr - > data ;
e - > u = ( unsigned char * ) e - > curr - > data ;
e - > u = ( unsigned char * ) e - > curr - > data ;
e - > i = 0 ;
e - > i = 0 ;
}
}
return 1 ;
return 1 ;
@ -612,7 +612,9 @@ encode_init(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
e - > use_nil = 1 ;
e - > use_nil = 1 ;
} else if ( enif_compare ( val , e - > atoms - > atom_force_utf8 ) = = 0 ) {
} else if ( enif_compare ( val , e - > atoms - > atom_force_utf8 ) = = 0 ) {
/ / Ignore , handled in Erlang
/ / Ignore , handled in Erlang
} else if ( get_bytes_per_iter ( env , val , & ( e - > bytes_per_iter ) ) ) {
} else if ( get_bytes_per_iter ( env , val , & ( e - > bytes_per_red ) ) ) {
continue ;
} else if ( get_bytes_per_red ( env , val , & ( e - > bytes_per_red ) ) ) {
continue ;
continue ;
} else {
} else {
return enif_make_badarg ( env ) ;
return enif_make_badarg ( env ) ;
@ -639,7 +641,7 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
double dval ;
double dval ;
size_t start ;
size_t start ;
size_t processed ;
size_t bytes_written = 0 ;
if ( argc ! = 3 ) {
if ( argc ! = 3 ) {
return enif_make_badarg ( env ) ;
return enif_make_badarg ( env ) ;
@ -662,9 +664,9 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
while ( ! enif_is_empty_list ( env , stack ) ) {
while ( ! enif_is_empty_list ( env , stack ) ) {
processed = ( e - > iosize + e - > i ) - start ;
if ( should_yield ( processed , e - > bytes_per_iter ) ) {
consume_timeslice ( env , processed , e - > bytes_per_iter ) ;
bytes_written + = ( e - > iosize + e - > i ) - start ;
if ( should_yield ( env , & bytes_written , e - > bytes_per_red ) ) {
return enif_make_tuple4 (
return enif_make_tuple4 (
env ,
env ,
st - > atom_iter ,
st - > atom_iter ,
@ -870,8 +872,6 @@ encode_iter(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[])
}
}
done :
done :
processed = ( e - > iosize + e - > i ) - start ;
consume_timeslice ( env , processed , e - > bytes_per_iter ) ;
return ret ;
return ret ;
}
}