Current section

Files

Jump to
tflite_beam c_src tflite error_reporter.cpp
Raw

c_src/tflite/error_reporter.cpp

#include <erl_nif.h>
#include "../nif_utils.hpp"
#include "../erlang_nif_resource.h"
#include "../helper.h"
#include "tensorflow/lite/core/api/error_reporter.h"
#include "tensorflow/lite/stderr_reporter.h"
#include "error_reporter.h"
ERL_NIF_TERM error_reporter_default_error_reporter(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]) {
NifResErrorReporter * res = nullptr;
auto e = tflite::DefaultErrorReporter();
if (e == nullptr) {
return erlang::nif::error(env, "cannot get default ErrorReporter");
}
ERL_NIF_TERM ret;
res = _make_error_reporter(env, e, ret);
res->is_default = true;
return ret;
}
bool _get_error_reporter(ErlNifEnv *env, ERL_NIF_TERM error_reporter_term, NifResErrorReporter *&error_reporter_res, tflite::ErrorReporter * &error_reporter, ERL_NIF_TERM &error_term) {
if (enif_get_resource(env, error_reporter_term, NifResErrorReporter::type, (void **)&error_reporter_res) && error_reporter_res->val) {
error_reporter = error_reporter_res->val;
return true;
} else if (erlang::nif::check_nil(env, error_reporter_term)) {
error_reporter = tflite::DefaultErrorReporter();
return true;
} else {
error_term = erlang::nif::error(env, "Invalid value for error_reporter");
return false;
}
}
NifResErrorReporter * _make_error_reporter(ErlNifEnv *env, tflite::ErrorReporter * e, ERL_NIF_TERM &out) {
NifResErrorReporter * res = nullptr;
if (!(res = NifResErrorReporter::allocate_resource(env, out))) {
return res;
}
res->val = e;
res->is_default = e == tflite::DefaultErrorReporter();
ERL_NIF_TERM ret = enif_make_resource(env, res);
enif_release_resource(res);
out = erlang::nif::ok(env, ret);
return res;
}