File: convolve13_cpp.cpp

package info (click to toggle)
rcpp 1.1.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,480 kB
  • sloc: cpp: 27,436; ansic: 7,778; sh: 53; makefile: 2
file content (27 lines) | stat: -rw-r--r-- 705 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8 -*-

// This is a rewrite of the 'Writing R Extensions' section 5.10.1 example

#include <Rcpp.h>

template <typename T>
T convolve( const T& a, const T& b ){
    int na = a.size() ; int nb = b.size() ;
    T out(na + nb - 1);
    typename T::iterator iter_a(a.begin()), iter_b(b.begin()), iter_ab( out.begin() ) ;

    for (int i = 0; i < na; i++)
        for (int j = 0; j < nb; j++)
            iter_ab[i + j] += iter_a[i] * iter_b[j];

    return out ;
}


RcppExport SEXP convolve13cpp(SEXP a, SEXP b){
    return convolve( Rcpp::NumericVector(a), Rcpp::NumericVector(b) ) ;
}

#include "loopmacro.h"
LOOPMACRO_CPP(convolve13cpp)