diff R/rdyncall/src/rpackage.c @ 0:0cfcc391201f

initial from svn dyncall-1745
author Daniel Adler
date Thu, 19 Mar 2015 22:26:28 +0100
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/R/rdyncall/src/rpackage.c	Thu Mar 19 22:26:28 2015 +0100
@@ -0,0 +1,101 @@
+/** ===========================================================================
+ ** R-Package: rdyncall
+ ** File: src/rpackage.c
+ ** Description: R package registry
+ **/
+
+#include <Rinternals.h>
+#include <R_ext/Rdynload.h>
+
+/** ---------------------------------------------------------------------------
+ ** Package contents:
+ */
+
+/* rdyncall.c */
+SEXP r_new_callvm(SEXP callmode, SEXP size);
+SEXP r_free_callvm(SEXP callvm);
+SEXP r_dyncall(SEXP args); /* .External() with args = callvm, address, signature, args */
+
+/* rdynload.c */
+SEXP r_dynload(SEXP libpath);
+SEXP r_dynsym(SEXP libobj, SEXP symname, SEXP protectlib);
+SEXP r_dynunload(SEXP libobj);
+
+/* rpack.c */
+SEXP r_pack(SEXP ptr, SEXP offset, SEXP sig, SEXP value);
+SEXP r_unpack(SEXP ptr, SEXP offset, SEXP sig);
+
+/* rcallback.c */
+SEXP r_new_callback(SEXP sig, SEXP fun, SEXP rho, SEXP mode);
+
+/* rutils.c */
+SEXP r_asextptr(SEXP v);
+SEXP r_isnullptr(SEXP x);
+SEXP r_offsetPtr(SEXP x, SEXP offset);
+
+/* rutils_str.c */
+SEXP r_ptr2str(SEXP ptr);
+SEXP r_strarrayptr(SEXP ptr);
+SEXP r_strptr(SEXP x);
+
+/* rutils_float.c */
+SEXP r_as_floatraw(SEXP real);
+SEXP r_floatraw2numeric(SEXP floatraw);
+
+/** ---------------------------------------------------------------------------
+ ** R Interface .External registry
+ */
+
+R_ExternalMethodDef externalMethods[] =
+{
+  /* --- rdyncall.c -------------------------------------------------------- */
+  {"dyncall",     (DL_FUNC) &r_dyncall,      -1},
+  /* --- end (sentinel) ---------------------------------------------------- */
+  {NULL,NULL,0}
+};
+
+/** ---------------------------------------------------------------------------
+ ** R Interface .Call registry
+ */
+
+R_CallMethodDef callMethods[] =
+{
+  /* --- rdyncall.c -------------------------------------------------------- */
+  {"new_callvm"                 , (DL_FUNC) &r_new_callvm       , 2},
+  {"free_callvm"                , (DL_FUNC) &r_free_callvm      , 1},
+  /* --- rdynload.c -------------------------------------------------------- */
+  {"dynload"                    , (DL_FUNC) &r_dynload          , 1},
+  {"dynsym"                     , (DL_FUNC) &r_dynsym           , 3},
+  {"dynunload"                  , (DL_FUNC) &r_dynunload        , 1},
+  /* --- rcallback.c ------------------------------------------------------- */
+  {"new_callback"               , (DL_FUNC) &r_new_callback     , 3},
+  /* --- rpack.c ----------------------------------------------------------- */
+  {"pack"                       , (DL_FUNC) &r_pack             , 4},
+  {"unpack"                     , (DL_FUNC) &r_unpack           , 3},
+  /* --- rutils.c ---------------------------------------------------------- */
+  {"asextptr"                   , (DL_FUNC) &r_asextptr         , 1},
+  {"isnullptr"                  , (DL_FUNC) &r_isnullptr        , 1},
+  {"offsetPtr"                  , (DL_FUNC) &r_offsetPtr        , 2},
+  /* --- rutils_str.c ------------------------------------------------------ */
+  {"r_ptr2str"                  , (DL_FUNC) &r_ptr2str          , 1},
+  {"r_strarrayptr"              , (DL_FUNC) &r_strarrayptr      , 1},
+  {"r_strptr"                   , (DL_FUNC) &r_strptr           , 1},
+  /* --- rutils_float.c ---------------------------------------------------- */
+  {"r_as_floatraw"              , (DL_FUNC) &r_as_floatraw      , 1},
+  {"r_floatraw2numeric"         , (DL_FUNC) &r_floatraw2numeric , 1},
+  /* --- end (sentinel) ---------------------------------------------------- */
+  {NULL,NULL, 0}
+};
+
+/** ---------------------------------------------------------------------------
+ ** R Library entry:
+ */
+
+void R_init_rdyncall(DllInfo *info)
+{
+  R_registerRoutines(info, NULL, callMethods, NULL, externalMethods);
+}
+
+void R_unload_rdyncall(DllInfo *info)
+{
+}