Skip to content

Initializing a large data structure to be accessed strictly within a shared C library

3 messages · Duncan Murdoch, James Muller

#
On 11-12-27 5:58 PM, James Muller wrote:
Yes, if you use malloc or Calloc you'll get memory that you can manage 
yourself.  See Writing R Extensions, section 6.1.2.

Duncan Murdoch
#
Thanks Duncan, you've unclogged my thinking. For anybody interested,
see below a sketch of the solution.

Cheers,

James


--START SKETCH OF SOLUTION--

#include <R.h>
#include <Rinternals.h>

static typedef struct {
    int nrow, ncol;
    double *data;
} _myparticle_data_struct;
static _myparticle_data_struct myparticle_data;

void myparticle_init() {
    // Before we begin, call this from .Call() to Ralloc() memory and load the
    // data into to myparticle_data.data
}

void myparticle_free() {
    // When we're done with the PSO, .Call() to Free() the data
}

void myparticle_eval(double *value, double *x) {
    // .Call() to evaluate the value *value given vector x[]
}

--END SKETCH OF SOLUTION--