| /* | |
| * R : A Computer Language for Statistical Data Analysis | |
| * Copyright (C) 2001-2016 The R Core Team. | |
| * | |
| * This header file is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU Lesser General Public License as published by | |
| * the Free Software Foundation; either version 2.1 of the License, or | |
| * (at your option) any later version. | |
| * | |
| * This file is part of R. R is distributed under the terms of the | |
| * GNU General Public License, either Version 2, June 1991 or Version 3, | |
| * June 2007. See doc/COPYRIGHTS for details of the copyright status of R. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| * GNU Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public License | |
| * along with this program; if not, a copy is available at | |
| * https://www.R-project.org/Licenses/ | |
| */ | |
| /* | |
| Not part of the API, subject to change at any time. | |
| */ | |
| #ifndef R_CALLBACKS_H | |
| #define R_CALLBACKS_H | |
| /** | |
| These structures are for C (and R function) top-level task handlers. | |
| Such routines are called at the end of every (successful) top-level task | |
| in the regular REPL. | |
| */ | |
| #include <Rinternals.h> | |
| /** | |
| The signature of the C routine that a callback must implement. | |
| expr - the expression for the top-level task that was evaluated. | |
| value - the result of the top-level task, i.e. evaluating expr. | |
| succeeded - a logical value indicating whether the task completed propertly. | |
| visible - a logical value indicating whether the result was printed to the R ``console''/stdout. | |
| data - user-level data passed to the registration routine. | |
| */ | |
| typedef Rboolean (*R_ToplevelCallback)(SEXP expr, SEXP value, Rboolean succeeded, Rboolean visible, void *); | |
| typedef struct _ToplevelCallback R_ToplevelCallbackEl; | |
| /** | |
| Linked list element for storing the top-level task callbacks. | |
| */ | |
| struct _ToplevelCallback { | |
| R_ToplevelCallback cb; /* the C routine to call. */ | |
| void *data; /* the user-level data to pass to the call to cb() */ | |
| void (*finalizer)(void *data); /* Called when the callback is removed. */ | |
| char *name; /* a name by which to identify this element. */ | |
| R_ToplevelCallbackEl *next; /* the next element in the linked list. */ | |
| }; | |
| #ifdef __cplusplus | |
| extern "C" { | |
| #endif | |
| Rboolean Rf_removeTaskCallbackByIndex(int id); | |
| Rboolean Rf_removeTaskCallbackByName(const char *name); | |
| SEXP R_removeTaskCallback(SEXP which); | |
| R_ToplevelCallbackEl* Rf_addTaskCallback(R_ToplevelCallback cb, void *data, void (*finalizer)(void *), const char *name, int *pos); | |
| /* | |
| The following definitions are for callbacks to R functions and | |
| methods related to user-level tables. This was implemented in a | |
| separate package on Omegahat and these declarations allow the package | |
| to interface to the internal R code. | |
| See https://developer.r-project.org/RObjectTables.pdf, | |
| http://www.omegahat.net/RObjectTables/ | |
| */ | |
| typedef struct _R_ObjectTable R_ObjectTable; | |
| /* Do we actually need the exists() since it is never called but R | |
| uses get to see if the symbol is bound to anything? */ | |
| typedef Rboolean (*Rdb_exists)(const char * const name, Rboolean *canCache, R_ObjectTable *); | |
| typedef SEXP (*Rdb_get)(const char * const name, Rboolean *canCache, R_ObjectTable *); | |
| typedef int (*Rdb_remove)(const char * const name, R_ObjectTable *); | |
| typedef SEXP (*Rdb_assign)(const char * const name, SEXP value, R_ObjectTable *); | |
| typedef SEXP (*Rdb_objects)(R_ObjectTable *); | |
| typedef Rboolean (*Rdb_canCache)(const char * const name, R_ObjectTable *); | |
| typedef void (*Rdb_onDetach)(R_ObjectTable *); | |
| typedef void (*Rdb_onAttach)(R_ObjectTable *); | |
| struct _R_ObjectTable{ | |
| int type; | |
| char **cachedNames; | |
| Rboolean active; | |
| Rdb_exists exists; | |
| Rdb_get get; | |
| Rdb_remove remove; | |
| Rdb_assign assign; | |
| Rdb_objects objects; | |
| Rdb_canCache canCache; | |
| Rdb_onDetach onDetach; | |
| Rdb_onAttach onAttach; | |
| void *privateData; | |
| }; | |
| #ifdef __cplusplus | |
| } | |
| #endif | |
| #endif /* R_CALLBACKS_H */ |