Keep references purely in erlang
Refernces contain three pieces of data which we already keep in the erlang record. Keep the repository it belongs to in the record as well and remove resource in the NIF. This makes the code easier to reason about, as we don't need to keep any reference counts or GC the C struct. This does mean we cannot re-use references across geef_repo restarts, but that's probably a good thing.
This commit is contained in:
@@ -4,13 +4,8 @@
|
||||
#include "erl_nif.h"
|
||||
#include <git2.h>
|
||||
|
||||
extern ErlNifResourceType *geef_ref_type;
|
||||
extern ErlNifResourceType *geef_ref_iter_type;
|
||||
|
||||
typedef struct {
|
||||
git_reference *ref;
|
||||
} geef_ref;
|
||||
|
||||
typedef struct {
|
||||
git_reference_iterator *iter;
|
||||
geef_repository *repo;
|
||||
@@ -21,15 +16,11 @@ ERL_NIF_TERM geef_reference_to_id(ErlNifEnv *env, int argc, const ERL_NIF_TERM a
|
||||
ERL_NIF_TERM geef_reference_glob(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_lookup(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_resolve(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_target(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_type(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_name(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_create(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_dwim(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_iterator(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
ERL_NIF_TERM geef_reference_next(ErlNifEnv *env, int argc, const ERL_NIF_TERM argv[]);
|
||||
|
||||
void geef_ref_free(ErlNifEnv *env, void *cd);
|
||||
void geef_ref_iter_free(ErlNifEnv *env, void *cd);
|
||||
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user