Rcpp Version 0.12.12
ConvolveBenchmarks/convolve7_c.c

The basic convolution example from Section 5.10.1 of 'Writing R Extensions', written using REAL(x)[i] accessor macros to demonstrate the performance hit imposed by these.

// This is from 'Writing R Extensions' section 5.10.1
// BUT slowed down by using REAL() on each access which proves to be rather costly
#include <R.h>
#include <Rdefines.h>
SEXP convolve7(SEXP a, SEXP b)
{
int i, j, na, nb, nab;
SEXP ab;
PROTECT(a = AS_NUMERIC(a));
PROTECT(b = AS_NUMERIC(b));
na = LENGTH(a); nb = LENGTH(b); nab = na + nb - 1;
PROTECT(ab = NEW_NUMERIC(nab));
for(i = 0; i < nab; i++) REAL(ab)[i] = 0.0;
for(i = 0; i < na; i++)
for(j = 0; j < nb; j++) REAL(ab)[i + j] += REAL(a)[i] * REAL(b)[j];
UNPROTECT(3);
return(ab);
}
#include "loopmacro.h"