Packages
vix
0.2.1
0.40.0
0.39.0
0.38.0
0.37.0
0.36.0
0.35.0
0.34.0
0.33.1
0.33.0
0.32.0
0.31.1
0.31.0
0.30.0
0.29.0
0.28.0
0.27.0
0.26.0
0.25.0
0.24.0
0.23.1
0.22.0
0.21.0
0.20.0
0.19.0
0.18.0
0.17.0
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.1
0.15.0
0.14.0
0.13.0
0.12.0
0.11.0
0.10.1
0.10.0
0.9.0
0.8.0
0.7.0
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.1
0.2.0
retired
0.1.0
NIF based bindings for libvips
Current section
Files
Jump to
Current section
Files
c_src/utils.c
#include "utils.h"
#include <glib-object.h>
#include <stdbool.h>
ERL_NIF_TERM ATOM_OK;
ERL_NIF_TERM ATOM_ERROR;
ERL_NIF_TERM ATOM_NIL;
ERL_NIF_TERM ATOM_TRUE;
ERL_NIF_TERM ATOM_FALSE;
ERL_NIF_TERM make_ok(ErlNifEnv *env, ERL_NIF_TERM term) {
return enif_make_tuple2(env, ATOM_OK, term);
}
ERL_NIF_TERM make_error(ErlNifEnv *env, const char *reason) {
return enif_make_tuple2(env, ATOM_ERROR,
enif_make_string(env, reason, ERL_NIF_LATIN1));
}
ERL_NIF_TERM raise_exception(ErlNifEnv *env, const char *msg) {
error(msg);
return enif_raise_exception(env, enif_make_string(env, msg, ERL_NIF_LATIN1));
}
ERL_NIF_TERM raise_badarg(ErlNifEnv *env, const char *reason) {
error("bad argument: %s", reason);
return enif_make_badarg(env);
}
ERL_NIF_TERM make_atom(ErlNifEnv *env, const char *name) {
ERL_NIF_TERM ret;
if (enif_make_existing_atom(env, name, &ret, ERL_NIF_LATIN1)) {
return ret;
}
return enif_make_atom(env, name);
}
VixResult vix_error(ErlNifEnv *env, const char *reason) {
error(reason);
return (VixResult){.is_success = false,
.result = enif_make_string(env, reason, ERL_NIF_LATIN1)};
}
VixResult vix_result(ERL_NIF_TERM term) {
return (VixResult){.is_success = true, .result = term};
}
int utils_init(ErlNifEnv *env) {
ATOM_OK = make_atom(env, "ok");
ATOM_ERROR = make_atom(env, "error");
ATOM_NIL = make_atom(env, "nil");
ATOM_TRUE = make_atom(env, "true");
ATOM_FALSE = make_atom(env, "false");
return 0;
}
void notify_consumed_timeslice(ErlNifEnv *env, ErlNifTime start,
ErlNifTime stop) {
ErlNifTime pct;
pct = (ErlNifTime)((stop - start) / 10);
if (pct > 100)
pct = 100;
else if (pct == 0)
pct = 1;
enif_consume_timeslice(env, pct);
}