#include <sys/types.h>
#include <gstruct/bamread.h>

#include "gmapR.h"

void R_Bamread_free(SEXP bamreader_R) {
  Bamreader_T bamreader = R_ExternalPtrAddr(bamreader_R);
  Bamread_free(&bamreader);
}

SEXP
R_Bamread_new (SEXP bamfile_R) {
  SEXP bamreader_R;
  Bamreader_T bamreader;
  const char *bamfile;

  bamfile = CHAR(asChar(bamfile_R));
  
  bamreader = Bamread_new((char *)bamfile);
  if (bamreader == NULL) {
    error("Could not open bamfile\n");
  }

  bamreader_R = R_MakeExternalPtr((void *) bamreader, R_NilValue, R_NilValue);
  R_RegisterCFinalizer(bamreader_R, R_Bamread_free);

  return bamreader_R;
}