[Rcpp-commits] r3245 - pkg/RcppEigen/inst/doc

noreply at r-forge.r-project.org noreply at r-forge.r-project.org
Sat Oct 29 20:44:05 CEST 2011


Author: edd
Date: 2011-10-29 20:44:04 +0200 (Sat, 29 Oct 2011)
New Revision: 3245

Modified:
   pkg/RcppEigen/inst/doc/Rcpp.bib
   pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw
   pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf
Log:
first partial pass (but only up to Section 3.1)


Modified: pkg/RcppEigen/inst/doc/Rcpp.bib
===================================================================
--- pkg/RcppEigen/inst/doc/Rcpp.bib	2011-10-29 15:06:57 UTC (rev 3244)
+++ pkg/RcppEigen/inst/doc/Rcpp.bib	2011-10-29 18:44:04 UTC (rev 3245)
@@ -216,6 +216,15 @@
   url =		 CRAN # "package=rbenchmark"
 }
 
+; see http://eigen.tuxfamily.org/index.php?title=BibTeX
+; replaced 'howpublished' with 'url' and updated year to 2011
+ at MISC{Eigen:Web,
+  author =	 {Ga\"{e}l Guennebaud and Beno\^{i}t Jacob and others},
+  title =	 {Eigen v3},
+  year =	 2011,
+  url =		 {http://eigen.tuxfamily.org},
+}
+
 @Article{Gropp+Lusk+Doss+Skjellum:1996:MPI,
   author = 	 {William Gropp and Ewing Lusk and Nathan Doss and Anthony Skjellum},
   title = 	 {A high-performance, portable implementation of the {MPI} message passing interface standard},

Modified: pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw
===================================================================
--- pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw	2011-10-29 15:06:57 UTC (rev 3244)
+++ pkg/RcppEigen/inst/doc/RcppEigen-Intro.Rnw	2011-10-29 18:44:04 UTC (rev 3245)
@@ -4,6 +4,7 @@
 \usepackage{color, alltt, bm, amsmath, listings}
 \lstset{language=C++,basicstyle=\small}
 \usepackage[authoryear,round,longnamesfirst]{natbib}
+\usepackage{booktabs,flafter,thumbpdf} % booktabs for nice tables, flafter for float control, thumbpdf is a tip from Achim
 \usepackage[colorlinks]{hyperref}
 \definecolor{link}{rgb}{0,0,0.3}	%% next few lines courtesy of RJournal.sty
 \hypersetup{
@@ -21,7 +22,7 @@
 prettyVersion <- packageDescription("RcppEigen")$Version
 prettyDate <- format(Sys.Date(), "%B %e, %Y")
 @
-\author{Douglas Bates}
+\author{Douglas Bates \and Dirk Eddelbuettel \and Romain Fran\c{c}ois}
 \title{An Introduction to \pkg{RcppEigen}}
 \date{\pkg{RcppEigen} version \Sexpr{prettyVersion} as of \Sexpr{prettyDate}}
 
@@ -48,20 +49,83 @@
 require( RcppEigen )
 @
 \begin{document}
+
+%% Below is what DE currently uses somewhere else -- I am not religuous about
+%% the grey background etc -- comment out and see if you like any of it
+%% Just like DB below, DE also uses  frame=tb  for top+bottom frame lines
+% \definecolor{darkgray}{rgb}{0.95,0.95,0.95}
+% \lstset{backgroundcolor=\color{darkgray}}
+% \lstset{numbers=left, numberstyle=\tiny, stepnumber=2, numbersep=5pt}
+% \lstset{keywordstyle=\color{black}\bfseries\tt}
+% \lstset{ %
+%   %language=Octave,                % the language of the code
+%   %basicstyle=\footnotesize,       % the size of the fonts that are used for the code
+%   basicstyle=\small,              % the size of the fonts that are used for the code
+%   numbers=left,                   % where to put the line-numbers
+%   %numberstyle=\footnotesize,      % the size of the fonts that are used for the line-numbers
+%   stepnumber=2,                   % the step between two line-numbers. If it's 1, each line
+%                                   % will be numbered
+%   numbersep=5pt,                  % how far the line-numbers are from the code
+%   %backgroundcolor=\color{white},  % choose the background color. You must add \usepackage{color}
+%   showspaces=false,               % show spaces adding particular underscores
+%   showstringspaces=false,         % underline spaces within strings
+%   showtabs=false,                 % show tabs within strings adding particular underscores
+%   %frame=single,                   % adds a frame around the code
+%   tabsize=2,                      % sets default tabsize to 2 spaces
+%   captionpos=b,                   % sets the caption-position to bottom
+%   breaklines=true,                % sets automatic line breaking
+%   breakatwhitespace=false         % sets if automatic breaks should only happen at whitespace
+%   %title=\lstname,                 % show the filename of files included with \lstinputlisting;
+%                                   % also try caption instead of title
+%   %escapeinside={\%*}{*)},         % if you want to add a comment within your code
+%   %morekeywords={*,...}            % if you want to add more keywords to the set
+% }
+
+
 \maketitle
 
 \abstract{
   \noindent
-  The \pkg{RcppEigen} package provides access from \proglang{R} to the
-  \pkg{Eigen} \proglang{C++} template library for numerical linear
-  algebra. \pkg{Rcpp} \citep{JSS:Rcpp} classes and specializations of
-  the \proglang{C++} templated functions \code{as} and \code{wrap}
-  from \pkg{Rcpp} provide the ``glue'' for passing objects from
+  The \pkg{RcppEigen} package provides access from \proglang{R}
+  \citep{R:Main} to the \pkg{Eigen} \proglang{C++} template library for
+  numerical linear algebra. \pkg{Rcpp} \citep{JSS:Rcpp} classes and
+  specializations of the \proglang{C++} templated functions \code{as} and
+  \code{wrap} from \pkg{Rcpp} provide the ``glue'' for passing objects from
   \proglang{R} to \proglang{C++} and back.  }
 
 \section{Introduction}
 \label{sec:intro}
 
+Linear algebra is an essential building block of statistical computing.
+Operations such as matrix decompositions, linear program solvers, and
+eigenvalue / eigenvector computations are used in many estimation and
+analysis routines. As such, libraries supporting linear algebra have long been
+provided by statistical programmers for different programming languages and
+environments. \proglang{C++}, one the central modern languages for numerical
+and statistical computing, can be extended particularly well due to its
+object-oriented nature, and numerous class libraries providing linear algebra
+routines have been written over the years.
+% Could cite Eddelbuettel (1996) here, but a real survey would be better.
+
+As both the \proglang{C++} language and standards have evolved
+\citep{Meyers:2005:EffectiveC++,Meyers:1995:MoreEffectiveC++}, so have the
+compilers implementing the language.  Relatively modern language constructs
+such as template meta-programming are particularly useful. It provides both
+overloading of operations (allowing expressive code in the compiled language
+similar to what can be done in scripting languages) and can shift some of the
+computational burden from the run-time to the compile-time (though a more
+detailed discussions of template programming is however beyond this
+paper). \cite{Veldhuizen:1998:Blitz} provided an early and influential
+implementation that already demonstrated key features of this approach.  Its
+usage however was held back at the time by the somewhat limited availability
+of compilers implementing all necessary features of the \proglang{C++}
+language.
+
+This situation has greatly improved over the last decade, and many more such
+libraries have been contributed. One such \proglang{C++} library is
+\pkg{Eigen} by \citet*{Eigen:Web}.  \marginpar{TODO: short Eigen history. Then pivot to
+R and Rcpp.}
+
 As stated in the \pkg{Rcpp} \citep{CRAN:Rcpp} vignette, ``Extending \pkg{Rcpp}''
 \begin{quote}
   \pkg{Rcpp} facilitates data interchange between \proglang{R} and
@@ -78,43 +142,43 @@
 versatile and comprehensive representations of dense and sparse
 matrices and vectors, as well as decompositions and other functions
 to be applied to these objects.  In the next section we introduce some
-of these classes and show how to interface to them from R.
+of these classes and show how to interface to them from \proglang{R}.
 
 \section{Eigen classes}
 \label{sec:eclasses}
 
-\pkg{Eigen} (\url{http://eigen.tuxfamily.org}) is a \proglang{C++} template
+\pkg{Eigen} \citep*{Eigen:Web} is a \proglang{C++} template
 library providing classes for many forms of matrices, vectors, arrays
 and decompositions.  These classes are flexible and comprehensive
 allowing for both high performance and well structured code
 representing high-level operations. \proglang{C++} code based on Eigen
 is often more like \proglang{R} code, working on the ``whole object'',
-than compiled code in other languages where operations often must be
+rather than compiled code in other languages where operations often must be
 coded in loops.
 
 As in many \proglang{C++} template libraries using template
 meta-programming
 \citep{Abrahams+Gurtovoy:2004:TemplateMetaprogramming}, the templates
 themselves can be very complicated.  However, \pkg{Eigen} provides
-typedef's for common classes that correspond to \proglang{R} matrices and
+\code{typedef}s for common classes that correspond to \proglang{R} matrices and
 vectors, as shown in Table~\ref{tab:REigen}. We will use these
-typedef's throughout this document.
+\code{typedef}s throughout this document.
 \begin{table}[tb]
   \caption{Correspondence between R matrix and vector types and classes in the \code{Eigen} namespace.}
   \label{tab:REigen}
-  \centering 
+  \centering
   \begin{tabular}{l l}
-    \hline
+    \toprule
     \multicolumn{1}{c}{\proglang{R} object type} & \multicolumn{1}{c}{\pkg{Eigen} class typedef}\\
-    \hline
-    numeric matrix & \code{MatrixXd}\\
-    integer matrix & \code{MatrixXi}\\
-    complex matrix & \code{MatrixXcd}\\
-    numeric vector & \code{VectorXd}\\
-    integer vector & \code{VectorXi}\\
-    complex vector & \code{VectorXcd}\\
-    \code{Matrix::dgCMatrix} & \code{SparseMatrix<double>}\\
-    \hline
+    \midrule
+    numeric matrix                          & \code{MatrixXd}\\
+    integer matrix                          & \code{MatrixXi}\\
+    complex matrix                          & \code{MatrixXcd}\\
+    numeric vector                          & \code{VectorXd}\\
+    integer vector                          & \code{VectorXi}\\
+    complex vector                          & \code{VectorXcd}\\
+    \code{Matrix::dgCMatrix} \phantom{XXX}  & \code{SparseMatrix<double>}\\
+    \bottomrule
   \end{tabular}
 \end{table}
 
@@ -184,13 +248,13 @@
 using Eigen::MatrixXd;
 using Rcpp::as;
 
-const Map<MatrixXd>  A(as<Map<MatrixXd> >(AA));  
+const Map<MatrixXd>  A(as<Map<MatrixXd> >(AA));
 \end{lstlisting}
 where \code{AA} is the name of the R object (called an \code{SEXP} in
 \proglang{C} and \proglang{C++}) passed to the \proglang{C++} function.
 
 The \Sexpr{link("cxxfunction")} from the \pkg{inline}
-\citep{CRAN:inline} package for \proglang{R} and its \pkg{RcppEigen}
+package \citep*{CRAN:inline} for \proglang{R} and its \pkg{RcppEigen}
 plugin provide a convenient way of developing and debugging the
 \proglang{C++} code.  For actual production code we generally
 incorporate the \proglang{C++} source code files in a package and
@@ -218,7 +282,7 @@
 <<Adef>>=
 (A <- matrix(1:6, ncol=2))
 str(A)
-@ 
+@
 and, in Listing~\ref{trans}, use the \code{transpose()} method for the
 \code{Eigen::MatrixXi} class to return its transpose. The \proglang{R}
 matrix in the \code{SEXP} \code{AA} is mapped to an
@@ -237,10 +301,10 @@
 return wrap(At);
 '
 @
-\begin{lstlisting}[frame=tb,float,caption={transCpp: Transpose a matrix of integers},label=trans]
-<<transCppLst,results=tex,echo=FALSE>>=
+\begin{lstlisting}[frame=tb,caption={transCpp: Transpose a matrix of integers},label=trans]
+<<transCppLst,results=tex,echo=FALSE >>=
 cat(transCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<ftrans>>=
 ftrans <- cxxfunction(signature(AA="matrix"), transCpp, plugin="RcppEigen")
@@ -271,10 +335,10 @@
                     _["crossprod(B, C)"] = B.adjoint() * C);
 '
 @
-\begin{lstlisting}[frame=tb,float,caption={prodCpp: Product and cross-product of two matrices},label=prod]
+\begin{lstlisting}[frame=tb,caption={prodCpp: Product and cross-product of two matrices},label=prod]
 <<prodCppLst,results=tex,echo=FALSE>>=
 cat(prodCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<prod>>=
 fprod <- cxxfunction(signature(BB = "matrix", CC = "matrix"), prodCpp, "RcppEigen")
@@ -328,7 +392,7 @@
 using Eigen::Lower;
 
 const Map<MatrixXi> A(as<Map<MatrixXi> >(AA));
-const int           m(A.rows()), n(A.cols());                        
+const int           m(A.rows()), n(A.cols());
 MatrixXi          AtA(MatrixXi(n, n).setZero().
                       selfadjointView<Lower>().rankUpdate(A.adjoint()));
 MatrixXi          AAt(MatrixXi(m, m).setZero().
@@ -338,10 +402,10 @@
                     _["tcrossprod(A)"] = AAt);
 '
 @
-\begin{lstlisting}[frame=tb,float,caption={crossprodCpp: Cross-product and transposed cross-product of a single matrix},label=crossprod]
+\begin{lstlisting}[frame=tb,caption={crossprodCpp: Cross-product and transposed cross-product of a single matrix},label=crossprod]
 <<crossprodCppLst,results=tex,echo=FALSE>>=
 cat(crossprodCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<>>=
 fcprd <- cxxfunction(signature(AA = "matrix"), crossprodCpp, "RcppEigen")
@@ -386,7 +450,7 @@
 switch to numeric matrices
 <<storage>>=
 storage.mode(A) <- "double"
-@ 
+@
 before applying the code in Listing~\ref{chol}.
 <<cholCpp,echo=FALSE>>=
 cholCpp <- '
@@ -403,11 +467,11 @@
 return List::create(_["L"] = MatrixXd(llt.matrixL()),
                     _["R"] = MatrixXd(llt.matrixU()));
 '
-@ 
-\begin{lstlisting}[frame=tb,float,caption={cholCpp: Cholesky decomposition of a cross-product},label=chol]
+@
+\begin{lstlisting}[frame=tb,caption={cholCpp: Cholesky decomposition of a cross-product},label=chol]
 <<cholCppLst,results=tex,echo=FALSE>>=
 cat(cholCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<fchol>>=
 fchol <- cxxfunction(signature(AA = "matrix"), cholCpp, "RcppEigen")
@@ -456,11 +520,11 @@
                     _["d2"] = Dvec.prod(),
                     _["ld"] = Dvec.array().log().sum());
 '
-@ 
-\begin{lstlisting}[frame=tb,float,caption={cholDetCpp: Determinant of a cross-product using the Cholesky decomposition},label=cholDet]
+@
+\begin{lstlisting}[frame=tb,caption={cholDetCpp: Determinant of a cross-product using the Cholesky decomposition},label=cholDet]
 <<cholDetCppLst,results=tex,echo=FALSE>>=
 cat(cholDetCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<fdet>>=
 fdet <- cxxfunction(signature(AA = "matrix"), cholDetCpp, "RcppEigen")
@@ -528,11 +592,11 @@
                         _["rank"]           = p,
                         _["Std. Error"]     = se);
 '
-@ 
-\begin{lstlisting}[frame=tb,float,caption={lltLSCpp: Least squares using the Cholesky decomposition},label=lltLS]
+@
+\begin{lstlisting}[frame=tb,caption={lltLSCpp: Least squares using the Cholesky decomposition},label=lltLS]
 <<lltLSCppLst,results=tex,echo=FALSE>>=
 cat(lltLSCpp, "\n")
-@ 
+@
 \end{lstlisting}
 shows a calculation of the least squares coefficient estimates
 (\code{betahat}) and the standard errors (\code{se}) through an
@@ -600,7 +664,7 @@
 
 Listing~\ref{QRLS} shows a least squares solution using the unpivoted
 QR decomposition.
-\begin{lstlisting}[frame=tb,float,caption={QRLSCpp: Least squares using the unpivoted QR decomposition},label=QRLS]
+\begin{lstlisting}[frame=tb,caption={QRLSCpp: Least squares using the unpivoted QR decomposition},label=QRLS]
 using Eigen::HouseholderQR;
 
 const HouseholderQR<MatrixXd> QR(X);
@@ -622,13 +686,13 @@
 One important consideration when determining least squares solutions
 is whether $\rank(\bm X)$ is $p$, a situation we describe by saying
 that $\bm X$ has ``full column rank''.   When $\bm X$ does not have
-full column rank we say it is ``rank deficient''.  
+full column rank we say it is ``rank deficient''.
 
-Although the theoretical rank of a matrix is well-defined, its 
+Although the theoretical rank of a matrix is well-defined, its
 evaluation in practice is not.  At best we can compute an effective
 rank according to some tolerance.  We refer to decompositions that
 allow us to estimate the rank of the matrix in this way as
-``rank-revealing''. 
+``rank-revealing''.
 
 Because the \code{model.matrix} function in \proglang{R} does a
 considerable amount of symbolic analysis behind the scenes, we usually
@@ -653,7 +717,7 @@
                          # lm detects the rank deficiency
 fm1 <- lm(y ~ f1 * f2, dd)
 writeLines(capture.output(print(summary(fm1), signif.stars=FALSE))[9:22])
-@ 
+@
 
 The \code{lm} function for fitting linear models in \proglang{R} uses
 a rank-revealing form of the QR decomposition.  When the model matrix
@@ -691,7 +755,7 @@
 are in increasing order we include a Boolean argument \code{rev}
 indicating whether the order is reversed.
 
-\begin{lstlisting}[frame=tb,float,caption={DplusCpp: Create the
+\begin{lstlisting}[frame=tb,caption={DplusCpp: Create the
     diagonal matrix $\bm D^+$ from the array of singular values $\bm d$},label=Dplus]
 using Eigen::DiagonalMatrix;
 using Eigen::Dynamic;
@@ -710,7 +774,7 @@
 
 With these definitions the code for least squares using the singular
 value decomposition can be written as in Listing~\ref{SVDLS}.
-\begin{lstlisting}[frame=tb,float,caption={SVDLSCpp: Least squares using the SVD},label=SVDLS]
+\begin{lstlisting}[frame=tb,caption={SVDLSCpp: Least squares using the SVD},label=SVDLS]
 using Eigen::JacobiSVD;
 
 const JacobiSVD<MatrixXd> UDV(X.jacobiSvd(Eigen::ComputeThinU|Eigen::ComputeThinV));
@@ -757,7 +821,7 @@
 
 With these definitions we can adapt much of the code from the SVD
 method for the eigendecomposition, as shown in Listing~\ref{SymmEigLS}.
-\begin{lstlisting}[frame=tb,float,caption={SymmEigLSCpp: Least squares using the eigendecomposition},label=SymmEigLS]
+\begin{lstlisting}[frame=tb,caption={SymmEigLSCpp: Least squares using the eigendecomposition},label=SymmEigLS]
 using Eigen::SelfAdjointEigenSolver;
 
 const SelfAdjointEigenSolver<MatrixXd>
@@ -793,7 +857,7 @@
 X\bm P$ only.
 
 In the rank-deficient case the straightforward calculation of the
-fitted values, as $\bm X\widehat{\bm\beta}$, cannot be used.  We 
+fitted values, as $\bm X\widehat{\bm\beta}$, cannot be used.  We
 could do some complicated rearrangement of the columns of X and the
 coefficient estimates but it is conceptually (and computationally)
 easier to employ the relationship
@@ -807,7 +871,7 @@
 \end{displaymath}
 The vector $\bm Q^\prime\bm y$ is called the ``effects'' vector in \proglang{R}.
 
-\begin{lstlisting}[frame=tb,float,caption={ColPivQRLSCpp: Least squares using the pivoted QR decomposition},label=ColPivQRLS]
+\begin{lstlisting}[frame=tb,caption={ColPivQRLSCpp: Least squares using the pivoted QR decomposition},label=ColPivQRLS]
 using Eigen::ColPivHouseholderQR;
 typedef ColPivHouseholderQR<MatrixXd>::PermutationType  Permutation;
 
@@ -842,7 +906,7 @@
 all.equal(coef(fm1), coef(fmPQR))
 all.equal(unname(fitted(fm1)), fitted(fmPQR))
 all.equal(unname(residuals(fm1)), residuals(fmPQR))
-@ 
+@
 
 The rank-revealing SVD method produces the same fitted
 values but not the same coefficients.
@@ -851,14 +915,14 @@
 all.equal(coef(fm1), coef(fmSVD))
 all.equal(unname(fitted(fm1)), fitted(fmSVD))
 all.equal(unname(residuals(fm1)), residuals(fmSVD))
-@ 
+@
 The coefficients from the symmetric eigendecomposition method are the same as those from the SVD
 <<rankdeficientVLV>>=
 print(summary(fmVLV <- fastLm(y ~ f1 * f2, dd, method=5L)), signif.stars=FALSE)
 all.equal(coef(fmSVD), coef(fmVLV))
 all.equal(unname(fitted(fm1)), fitted(fmSVD))
 all.equal(unname(residuals(fm1)), residuals(fmSVD))
-@ 
+@
 
 \subsection{Comparative speed}
 
@@ -875,7 +939,7 @@
 installed \pkg{RcppEigen} package.
 
 
-It can be run as 
+It can be run as
 <<benchmark,eval=FALSE>>=
 source(system.file("examples", "lmBenchmark.R", package="RcppEigen"))
 @
@@ -966,10 +1030,10 @@
 return wrap(A.transpose());
 '
 @
-\begin{lstlisting}[frame=tb,float,caption={badtransCpp: Transpose producing incorrect results},label=badtrans]
+\begin{lstlisting}[frame=tb,caption={badtransCpp: Transpose producing incorrect results},label=badtrans]
 <<badtransCppLst,results=tex,echo=FALSE>>=
 cat(badtransCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<ftrans2>>=
 Ai <- matrix(1:6, ncol=2L)
@@ -1001,11 +1065,11 @@
                     _["Aty"] = At * y);
 '
 @
-\begin{lstlisting}[frame=tb,float,
+\begin{lstlisting}[frame=tb,
   caption={sparseProdCpp: Transpose and product with sparse matrices},label=sparseProd]
 <<sparseProdCppLst,results=tex,echo=FALSE>>=
 cat(sparseProdCpp, "\n")
-@ 
+@
 \end{lstlisting}
 <<>>=
 sparse1 <- cxxfunction(signature(AA = "dgCMatrix", yy = "numeric"),
@@ -1021,6 +1085,7 @@
 \pkg{CHOLMOD} code from the \pkg{Matrix} package.  At present, both of
 these are regarded as experimental.
 
+
 \bibliographystyle{plainnat}
 \bibliography{Rcpp}
 

Modified: pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf
===================================================================
--- pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf	2011-10-29 15:06:57 UTC (rev 3244)
+++ pkg/RcppEigen/inst/doc/RcppEigen-Intro.pdf	2011-10-29 18:44:04 UTC (rev 3245)
@@ -129,1819 +129,1968 @@
 85 0 obj
 << /S /GoTo /D [86 0 R  /Fit ] >>
 endobj
-98 0 obj <<
-/Length 3396      
+107 0 obj <<
+/Length 4232      
 /Filter /FlateDecode
 >>
 stream
-xÚ½[ëã¶ÿ~…‘/µÑ3#R%¦E$½¤
-P½,Ú ¹|ðzµ»jüØÈÞÛ»þõ_’ìõ&×â ­,‘Ãá<~󐮘ÝÍŠÙ·¯Š¿ºzõù7µšÉZ(YéÙÕíLZ#%gÆ4BZ¸u3ûqþån±,‹bþ×…œïªžûýb©ªùÍ#ÜYÃqìöôŒ†÷‹Ÿ®¾ÊuF¹4¢”°.‘|‹àôðNwíÎMSÅLJa«Já´¥)E
-󖪍•nöŸaü×¾ƒcÇ
-Ž¬®Ìü+¼>ÂÑ"	½¦²r¥(mùBfL!šºò{x¿Pͼíqiœã% r)\K8ðoéøJXÄ‘·îòï¸4r»¿‰šy—½{¤à²†ãµ£©
-¤)‘­‘"?ÿdÜk‰Z¢²ÍlY–ÂÈšu³¯(š~å•v‚–¶	­¥l@ðÒÀHŒ‰]Ý£|ƒxãhiEQ7ç”LB¢‰Ù2ºnðÄVéz¡ìüçEUÓ¯;ZtYV–€
-ÂÓ÷HùÆ©5s¿»5Ýã›·=Ê|ëµ'«L4r<fÍ
-vDšr$ñò”T
-Æeü$Ú|ºóŒUÁú¯aÔï?ÁØ«V&å£Ý>$ÖŒÂÁ[Ý5JôY{6-±CÉ¡ÿlÉÞº5Ù¸¡›Žx‚D ¹‡©¡Áqdî`4Ç©¬Ë¯(&$R‚iF†1µS-lÜ黢*ØNáŸ(g=š©»|ûí«ÙrþÕO&°a6pkíÑKv¥3¡„ŸfþÍ¢1Ž_¼ù®(‹…C[³'w‡Ì;p×gù 5Ðgö}IÌ‰À~¤c`€ëÀæ;Á偄Ÿ·ÈY·b•wÿIôÎàKø‚4_ðr`¥¹å5V(û¼åi0æúË»qFRÖµ¨›•Ü>2{ë1¿Ž+[Š1Aý«8*cJ*¡M™ŽrBÓƒÔ4ý'2hÇø¤ñIÑ„Å3ÔÈ\ŠÚÈË̹MQ¥ÈÆÀÕy«§Ó*ÑÔRÉzþN–Ú¸Gö°ÏÜ£àÉ0ë!?ŽB;šÏœCT©Ìüßd<ǃ»k-Œ.Ï£amÆÁá)”Ö—`šªÍX‰ÄåuSl5“`ŽÚ¸X^V•0¥†	q‡Í
-ÜKJ¥9[)1â1jíÇub€cŽ
-°\	P4NÐ:s';ùpy<ØŸ®…©|äCÞ’=‡|÷·´ž>¤9¾Õ†Ã=JûÎG˜ÀëëÌî1f~ û;Þb4î	w,!6•úcùd°àÏNä@yÈ¿ Î
-°30>í³âó«(ÀÁàH·>)黏)r‚})È#o’{+¼UÏ;
-Ó4¨'/¸ç1»˜áÔkŽ8ä‰rR'·	¿ÔàqFóïF…9…«-(Lõ¼+¡*ƽƒ@g«wtƒ¶{¼[rQ†dø—ºŽ|Y@‘
-"Ê )eÊx|ÁÇ©HƒÜä1œSfPLþ³s9)œÚ>«
-oÝØ4G 9—ª¡TõCç41Žî{.ÖBªP
-ÜpBÒÏÅàª|¡ O‹°Ñ°uóÂÀt™§ÔEMô6!gÇ`UM-lYårº®jDm/¨‡5•‰ËŸ¯©À«ŠR“&©©|Íš&’TœÞûꀆõnÌ»BjN[.u}:½uIì~˜¦Às…”´¢qya%……ÃEY‡,›ç+)`w¢’âJÞ‡SøÙ¹íñ¾—¬ÞJ@(—3ÐØ:\FP©{°Ü  &ÆÎU5—8×)Ó…0Õ¯H˜?‰§Þ{¶"±àÍÝsíCåÀ-'¹d—l»QÊ6¶´2ú¸ôÈІE‚µÁмC€—Õ ô9çÐ6Bù3ËU ÊúüvƒT·Ÿºö??]wÜ{a
-K.7q‚ÓÛv•„[ÌÓ\ljF¶¼‰T)g€¶¢¾½÷¹òÛ15Û·nm/¤@´Hî-$ö
-
-N«s©‡þšr¥á­»‘9¯âúÚ‘ïý˜­ßQ®
-Žf»øCœ$uðíº¤Ý§8'Ûp…©þNä°¶q Ó‚â{÷ü\nD|.9qŒ„½“S¨å%\;—J£DÆa]Zi§S±XêªâR†5!ËÃ)ä—h,ý>´¦iÆS°‚½—M‚šÐ5‰ðÑéÉQñ†Æs¼5À#^œ­nŒ{0x7•1¼'‘QvM7²ß°‚)<Êlûø·£‘Ñc§ÄëSr¦·±©–ÀE^ù*®|ßPyÕ¢üêj¸Ç2@T¾Ï"Rcí……ê°¿#ª:€Ù=ëû˜D—Ïùh`jY#‚Ç¢¾?^ÝÖ¶<·ú‘Çí9BÝe%Þ¨¤„¬Lžæ겚wÜNƒËÕT¤2$özgRVÏæº4¹®=ÛçNºÔÁ 'ùp‹d·¡fÓç[òÙRLÀŒ³–Õ 
-äLÉAÀ;­ƒ@~D›€­àª×uNÝ
-~úsCŽ~Ú’TEã*{p5éÁ¼T#LYiÅ“>tÜ&Ù´“,%@Ì(†©.„Ô8u³	H€Å:e´ðˆåŸºuãdy¶èܐ røÎÿÖ¾ß;}qDžÂ„<À”®k|ì“(ðHºqºmzìlÝMvm€°4Q÷|âOJ|Âûž§!ûØ®î'ºÓÆR_‡Ìö²ª,V¤›0¡iH›¸‰<í8G3åUƒ¬üM Lí]/É7Ž-#¸±Ý{Ë‚&v61Þ–µÂÍùj½<¹t£†sZóçTÌ3•¶Žµõ-´§{¶æMg#ôg©ª9/æé¬"éÌ#:GÌI6<LUPW¡'Êfù	<ÞzXüû.¼±Eí`vls5=yÏïÛX'±µXK½n5â¿ù:}›Ùç@¾³74îònöÁ*!òT9»_úøa°áo3„â±ÅT‹J}QPÑÍAÅ:A¥s¢qHJsB2ÑsséE!U­ËE¨&œÖˆôv›E¦æ’îõ—±û$Œ³ÐÒ÷`@î[°£‡Û÷Î-¼/M·´P—ëß¼ÆCO¾±Ãæ´Í­)OIìŸÞû‡¤$s›Ä!ëèlªIòq|ƽ­qä>m4„w¶ÜEh¥€ÿ—˜œâbLæõä[j)tQ^X„f­½©ròà6qÄe?Fߤg×Íüwqç>EÉö¶
-ße#¶¶èj"ãÑ9rÝ-J+zWFÆÌ›”VgÚz°œyæ%˜²˜®µ.3%ó([òo}yҁ·ât¸s¼2áåÕ¢©hüµÀϼ–šrdÔ`,çÿBb­[øÉ—ð·Ð#gY$+Wê1h4nô½÷ÍJªb᪀AO׌ƒî¿“Å#ׁ‰6»ä7™×<v{§QøêT§	k{Ô*­N·^´ÎËCÖc¾n^®­ªi‹úŒ6%ž¾sÌ[xU!Œ´™gg•ÔÄNkQÅæéÎ2»ŸÕ`b¢kãÂqçûÉ÷Ž1¾J>F¨Š±k&¥ïGž†Žáƒ2nÌ¡ƒj-+Ù@ï$G
-íªI;Ÿ™0t)Ê¢9-‹ØÓü[©=Ã*ó‡Ø)Íd†_ÄÔIö+=þRßÂúô	b’U:W¦æ”
-Å_4á¸Û•Oô•
-ŽÑ»Ÿl{ÉS&•w6”+e(!8ø֏Z
+xÚ­[IãƾûW4|’àÍ*7ßÆk$0`4r±sÐHìe¤VƒT{Üùõyk-$µ´a4M±öWoùÞ¢üîñ.¿ûé‹üÌßoï¿øúÇÊÝ™:³¦tw÷w¦­²Æš»ªj2Ó«íݯ‹÷OËU‘ç‹¿/ÍâiiëÅ©?.W¶\l_àÍ>§Ý‘Ú¨Ûé¸üÏý?`æ6™¹¨²ÂÀº4å/8ðþ{þþÛÁç±{âa6¿3&kËÒâ°•ijØQ{·²MÖ´†‡Ž¸ø#|öðYÃg€åmµøŸOðéà…m‹Šzãý'ìQ.~ØÂüt2ú|p¶‡ø-Å}âѸÆNÎSü¸l좗…Ÿàó[^äKW”‹ÍQVÂqŠ&k]‡)²¢-ÞH‹*ÏšºTþ¾´Í¢Ã=;Ù¥l.ÏàÙÀÿL•ˆ@ØóÆ¥ñÐÇpàŠÒs“…Ç>ïxN›ãœ·5ᣯ¬ë;8XUÑM»<+[8cQfMU
+!•¤n¿Vž93Wc£¹àúáÚMeV™†g»ÿH—§ô
+ÝM›•y}“%‹8àÌF=Ë¥n–¶]|Z–5}{¤W.¯©COúÿŽ++
+ÜA¸!¤—Õâ¡g6âÕ“=[¸a`p¿ééÛ¬Ê}‡ßò2ÒÁ¿¬¸ë‘rüøËO_Üýj`ZóûŽyd/ì;?t,Ä-П:}‡-½œí~Ù ¬u§þV`Ùwפ©era=3R^’NÏÞdí²Öx}AøÈ{Ÿ’Ðo8íútúê«*®Š¶ÎÚy)™j¹;iŠÃs¤GNr×m¹ØïD;×ö¯üöáÈbâÚŠIù"¢ëwrïë=6;ž õµçñø¸'ŽòSg³Ì\gyî¦Ü<s6 €iÞÀ!ANõ¿õ;}¢žtš‘=úuÐw a.¯òÞÂ4°DÊ4¸—3Œ}7±¶Tä’}Â`ЮÖ9\zÑÃ3¨¸šu³“Ièzþ§÷ԨȲו(H—ˆ[%U;{•Aë7¥Wàg8o+
+ãEv²‘†]ØÍÜæñ\f[/-ëÐ+YßYî’^žh£ùL“¹ªÒžŸEå­ÏqŸÍ\Р‰ªK8úE{C;ÐÉ.VÊ0+ˆÚï;o»cè ÅN1Á‹èä/¹É‹,)p»Xj7Ÿh³
+\YŽôÑxrUV‹ÿvzhH½ ÓË"³å•žÏ
+qÆ4˜Ìºâ¶²u=½VØ$Ëv°g¢g€UØUŒ±ôåh±MælÍÓ€Èc€¾-7«mxܾl"Žœn(¶€ÚdªŽ•`QØ©„·0åÀ×Oü·£{êÄ`±–Y3>ÃITqíöÂ;¾NûA$±j£öœ†)‚ÇáÉÞnP5°I×Q%GÒú¢½Ÿ„Ù2à«Ò.~~fÕÏ)ZëEïᣜ2´tdBþà—Äç~íqiž²'+µ£rsª(Þ!ŠuD„ñئP©âCôlõ¡6zÒ	Æâ\waÏn§àˆ®èwÅK{µ(¼Ò×,…ÝîQÄRzãì*TÇ°±Yr¯§z¶°ü‚_è5+QlÄŽÖaåWÙý <uÍSº™Ê•,û¤\òªôÇÛ„}U_”
+ž–ÂÈÀ(eÝ.Þ<EÌ´Û‚/+@Ž828+õg…©—ÞŸ¢»}än{åÍN¶‡×8/©ÐÁ>>R?!a–c:ño@»'9§—…>„δñy!›eèXòJ;Ç£Œ´nWÅŽÏ[¡Åo¹)º>ºgfÂOL<赏|ºG¹Dï Èš1'”õañ^)Áì!À»´¶
+hàë°ÕæàCk/d’Òù‹éxCšÐ׍—Gö¶ö¼ÏÑî.©geÞ€É!%¢ÁY4 ãs Àä<îâûkÊTjJΓçz
+º¬nIP ÓZ<^`måLÝýqbÄé¼c×ûqæ=½Â¿òèÏÞe’Ílƒ*ï§#O·S  ïæ0Â,sÝv7:ÁÖÆz]r’åúÎé SŒÁ;ªhže£G»‘³ëBÓŒüªŵ¦Þ‹‰
+w˜–‚ҋ퍬4Ñ1ø2U(¸âgRx§SôêÂM̐5æÀe¯Ú™v=ð!ömŒMǽ—+£õÁ«Ô粺ˆ÷K“•¹˜9ãñÛþ¬^á-$j¥
+JS™N³
+[žªmx‰.KçØÓS'³]õ	ÿ’+}U›?öî8s¸º:sø)ßèâ.ÚrÞdᯘ½|2!Æbð¼L†D#Ö”;ˆõ$°(¼[a|)aþêêyHá§È‡mÛxüz^o"Bt†<žn«¿ yå9FJÞ5ó6é1¬»‰¡&aÈ—Èo¸S>qÖuh›ñDeêƒFðåêª	‘M…gàlœSÁúv*Ø•¬ÏºmCâU59"'î0;n9曡7ª?€7úýQÖÚŽ`“+½Sà*	–‘nêç`'vGRDµ§5>Çþ‡C;$×cÚ<ƒÂqLjufñ¥˜ap¢ÒªÅ5'€O³'Üëò”c^ÐßUvq,;»ƒ
+‚úЀ¦
+Gþèm}ßøÙè«7¶8fñž¼ÚI¿a£ ö9F²Å(Kc>8[ìpL÷2àVw²ÑAÅ\v"WJgS9Å9bmàÝI=Íz?Gjõ8I6µ œJn¾öÇYy_£³cüûR6<„nÈ‚:Rmï£0¾A{B½ê[ɨ­ižY,Ž´&ÛxPnMÌø0íñ!ì¹S*î£À)6MáÕÄjΩ:D2cÛZ¢ˆ¤ŸøT$W¨#E‚¹MXðUm2H4ÿnàïÏ>nÅòŒœ•]	Kü{‰HO¶¥	tQ¼Ð‡¡#Ek]7²ÞÀÁ§9éÔ]Ï8Vؤ܏]^U§G´Øùä”)Å[¶Ö<WÍ\õ¬ì¼nñ{‰¾(rAò}§zö•ßn•_RSµÖ”Û–»}RðFÃÀÁëT8ÜMµu¼õ¿s+n®cO›¬±ƒâÇ(ÃǨ,·c6AÞ½Õ8N.R¼ßr&4Š½5{Ê:ÅR/çðú!7êA_Á» £	‘^ˆ5waØ8±ª×Ð2¾ÐXòÆÙ
+|PMÃQ$ñÝMˆ•™(
+6RÔ:M)¯©Y4Â{~~Ò Çù4É‚M]ê
 
-z,\’b„¤HB_Šì}˜_ѐQö›}ƒ¶”àøaÓR‚úü‡c‹¥AˆÃsGçï&¤[–BKõ¶´(¼¥ÅÑxÝÒ™‘%¨o©TA깬Ðí0×=Ò¹§sGçtþÎôFQÎÿ0ù˜¾ ³M™ïá)éU®W17L•“ö¹<–¤D7žºãþÑ·Ê“ùå1|›âç†vÛ‹ï­ŒMJxT„ìªÄªGÔš?u<‚¸Ávááê_ïûÐyuо߅ªk¯¹$ÅÐÛf2qpS_¥·nÌ6ö>¸;«P®Žº½qDZ>o0܋É7îÂúIŸ.DE¤9x« •¢Ô
-}ySÑ)+"ì;ÅQô{pΙKÿÍÕ«_^Ir	¥ÑgÒ4”Íl½}õãOÅì~‡8l<ÑÐíLÉZô©Óföý«¸Ïqe¡S>d#Jð
-i m­³„$eׂ‚á—¤•†Ï}Zê…›%e!Œ4#LsúD&ªè0tÁéb°h¾õM¦ÒªŒP~±´2®
- ýQ`O¯;-[W€RÖœhÀø	£‘E!ê"Á±!ó=?}é>vDºð5›Þ]Ûÿ/ê.eh½§òeãûcNyÇï·2³~‰„Nè‹!ƒñây~þé{‹i²}±¶ÌsÚú”ìüF]…üâÓp”u‚‰SŠö)Ô
-ãê×'Ó) gíüûô½[œ§S°?2m)c“ó?Æ•Z	Xí%°2ù$Rå” 3UagHCzŸâÁmDgr
+“í\è ú2p…oAèy^]G虸ËU••n„ï#æC¯f؝¢á‘ô;C7$=	Fùs"üq1!ûºˆ—8v†àe³~õ’ñQDHò,‹|ìYâð<øÔ /É­œT]sö:‰<ÌùcÈRìb¥¦„%ØÊ™ë§àò
+ҍ$íãC´Ef
+s[(=ðÃ$ý‡k¥ÉýˆçÚ̆4í4c9Ê×å•ßNôî¬üSPârzÕ0/rµï8èÿÍAå ïxë݉Û×Z¬vº!}x)Ó«žšÆ¼îZ8µ­èÔu‘¡‚á/‹3ðï7ËU‹^/òò±×ú Ò|T1¥êª1MPü„¦z²ãÅǃ¹l –à>{÷œzã³0~\¥ù›UQìÚmùù$îóstÌ$Ó"³“Xm^§±aÖSœïÃ+ñØßœOŠWuÖ¸ú¶üˆW^þEa©ˆÁ½²K’NŠ`4)üg2Â8ç8#¼že0êJA×GŸ½Æ\ UÉ"Ϥ!ÁÄaç(‹<ss…Jó¡Ù:ä3¿<SÐ’LÜ㲚
+Z€9œ»e›Õ"=¨h“õÝÅ 
+žlãƒEܯj4ÀbŠ»Þã ØÚu<T”ô)<Ý\Í…q *+{)ÇÙĶu”mN窨Rèªr¶™-]œ4ý¨ø.r}ð¸ÞÛ³gý”-÷|[šÝØ6«ê&aŽj~#Ÿsùw” à&µz$œ!ERFòó.’¯àÙbß?• 6¶Ê¬-ÿšõsA|/U €î,Gb8Cék•	ežå.-Qúe#ç(}ž†Xs´ñâ6BÎÝG‰f4¡¡`«¦ÎÚ¢LuÊù"¹&«Û7×È•Y–¿X$WX®±èg+ä°5ö_,Gp½·HŽ•E_Ú8u&¤p1
+‹$Iou.ì$h?ª§rYc‹KÊ€’ö¦ÒS´W*zø@#¼üê2ÕžÚjäD­äzspfŠ:Õ‘ƒ”“(¥ºKSé*›[¤ëœtS•ÅMuD€Xšú¯b¯«bé½ä‚ªnCQҍâ™æÏ8¨,|)ù4ÁlSN«
+à‚æFO €fë_:…Y–3~ænƒ.¿îx”õåãzªŃìÈIû|5Þ‡¢ñG™ajîz¾·Ã:²·Ý;…qêО—÷aÖæ‡!ú;
+³s:Ìa÷H«ˆf
+tˆìe
+šÑMS¶T--Ž4uïøE"¼Œë}ŠCû¤…=¯'£Ùþ'J
+Z|oÛQzZf¢ýS’“ÆxF³&ªƒíEpD4„mm”‚·iüœèN–8ç¢À~]"ZÑÎcòüK)Hƒn‡y8„äò	}Á÷¡mšF|ö¼‘‹ô
+Kô!óÂ÷ijDã+ÇZ]\¸^lBiª­"IßÓ„Q<‘^$ßa%)4%ìzü»IÏ ±sáÂó”O]™›QÇ|õ ©S™TZ©üa÷¨y’ºSèLeT=xUŸµæ
+nîOQüÄÎÆO\•ÏÆOð=ÆO\Á¹ÏÞš!Ç‘öj|Qù`bQ³ó;q—°Ž÷Ée€ó¯‚\f
+Np—ÊCŠêL96Ìæ«máy\w‡Žý!h]‹eɍ™W»MkP*¦ f®‚p&:GOQÈW*Ó©B žS]™ÔÔqü61X¸×±ÀƒÕs"ßÔ!åÝÔšz!Í´ÓŠTi‹÷“¤üÈ^£
+ÂüQÚùbúÝ£%ëâÉÚ‚Möcø®y21×Q˜@Uu©á(ÆFÉq„Ë"„ ¾ôŸ&¿aZÒå¡B*Á÷Én1£(	+­¢ .“äýè&ç’ ¹nräŒq1tšœAÕÉÐ…#5x²Íª Ú5*2”ÐÒª†¿Ç‡Sô6Iã6RÕ%ɲ9weê²{_4͙ÐÖ`SÜò	œÆÄ{`Jpû¬	iÏë–~`Æ[Ìù—KPL,ĨrÜÑØ$§(+ͤķqK|¡ð—V^Fûì%ù€¿X¨š·”=:9W×w!sžÏ"÷ËߢÃ[”DòpÒò|…Mö	G™F†÷G/ÂÏž›/•¶9„˜y*š±&ž©j³à̺›ÌŠkn0+í´ôpà­¼Œ\wW´çë	°‘ŠKÉÑ]ÅiÝ´(8ئæ(ðÞoLyíˆçÆ`:‚
+ýi—#ã¬Í `Õ‚+;v1âª97¤ø>·¦XœfÈ5HS „¨‚§uó¬„×RJz Aa¯3µøû¸X7IɁUÿÛ¤`CœºwsaöÑbu£ÓŠ±À‹?šÖâïOË$6ó*äê¢ßÿ>̬Wج	ÊQèõ0÷…jã;KS^+S6™ÉKüõaf§?®‰GüpÿÅÿ$ZU7
 endstream
 endobj
 86 0 obj <<
 /Type /Page
-/Contents 98 0 R
-/Resources 97 0 R
+/Contents 107 0 R
+/Resources 106 0 R
 /MediaBox [0 0 612 792]
-/Parent 115 0 R
-/Annots [ 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R ]
+/Parent 119 0 R
+/Annots [ 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R 102 0 R 103 0 R ]
 >> endobj
 87 0 obj <<
 /Type /Annot
 /Subtype /Link
 /Border[0 0 0]/H/I/C[0 1 0]
-/Rect [163.586 554.726 273.477 565.6]
-/A << /S /GoTo /D (cite.JSS:Rcpp) >>
+/Rect [296.913 561.189 410.159 572.063]
+/A << /S /GoTo /D (cite.R:Main) >>
 >> endobj
 88 0 obj <<
 /Type /Annot
 /Subtype /Link
 /Border[0 0 0]/H/I/C[0 1 0]
-/Rect [278.226 554.726 303.728 565.6]
-/A << /S /GoTo /D (cite.JSS:Rcpp) >>
+/Rect [414.368 561.189 434.759 572.063]
+/A << /S /GoTo /D (cite.R:Main) >>
 >> endobj
 89 0 obj <<
 /Type /Annot
 /Subtype /Link
 /Border[0 0 0]/H/I/C[0 1 0]
-/Rect [191.14 492.861 298.79 503.735]
-/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
+/Rect [321.672 550.23 432.07 561.104]
+/A << /S /GoTo /D (cite.JSS:Rcpp) >>
 >> endobj
 90 0 obj <<
 /Type /Annot
 /Subtype /Link
 /Border[0 0 0]/H/I/C[0 1 0]
-/Rect [302.419 492.861 327.41 503.735]
-/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
+/Rect [437.073 550.23 462.575 561.104]
+/A << /S /GoTo /D (cite.JSS:Rcpp) >>
 >> endobj
 91 0 obj <<
 /Type /Annot
-/Border[0 0 0]/H/I/C[0 1 1]
-/Rect [125.387 347.213 249.536 358.087]
-/Subtype/Link/A<</Type/Action/S/URI/URI(http://eigen.tuxfamily.org)>>
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [341.225 400.346 371.694 411.22]
+/A << /S /GoTo /D (cite.Meyers:2005:EffectiveC++) >>
 >> endobj
 92 0 obj <<
 /Type /Annot
 /Subtype /Link
 /Border[0 0 0]/H/I/C[0 1 0]
-/Rect [409.925 292.419 513.534 303.293]
-/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
+/Rect [375.46 400.346 395.852 411.22]
+/A << /S /GoTo /D (cite.Meyers:2005:EffectiveC++) >>
 >> endobj
 93 0 obj <<
 /Type /Annot
 /Subtype /Link
 /Border[0 0 0]/H/I/C[0 1 0]
-/Rect [95.91 281.46 116.302 292.334]
-/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
+/Rect [399.618 400.346 420.009 411.22]
+/A << /S /GoTo /D (cite.Meyers:1995:MoreEffectiveC++) >>
 >> endobj
 94 0 obj <<
 /Type /Annot
 /Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [387.235 271.003 393.828 280.958]
-/A << /S /GoTo /D (table.1) >>
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [244.291 345.552 290.012 356.425]
+/A << /S /GoTo /D (cite.Veldhuizen:1998:Blitz) >>
 >> endobj
 95 0 obj <<
 /Type /Annot
 /Subtype /Link
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [250.996 248.835 257.589 259.04]
-/A << /S /GoTo /D (table.1) >>
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [294.268 345.552 314.659 356.425]
+/A << /S /GoTo /D (cite.Veldhuizen:1998:Blitz) >>
 >> endobj
+96 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [289.373 301.716 396.88 312.59]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
+>> endobj
+97 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [401.531 301.716 421.922 312.59]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
+>> endobj
+98 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [204.953 290.757 312.602 301.631]
+/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
+>> endobj
 99 0 obj <<
-/D [86 0 R /XYZ 71 757.862 null]
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [316.232 290.757 341.223 301.631]
+/A << /S /GoTo /D (cite.CRAN:Rcpp) >>
 >> endobj
 100 0 obj <<
-/D [86 0 R /XYZ 72 720 null]
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [125.398 143.862 235.877 154.736]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
 >> endobj
-2 0 obj <<
-/D [86 0 R /XYZ 72 531.868 null]
+101 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [240.356 143.862 260.747 154.736]
+/A << /S /GoTo /D (cite.Eigen:Web) >>
 >> endobj
-6 0 obj <<
-/D [86 0 R /XYZ 72 388.211 null]
+102 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [409.925 89.068 513.534 99.941]
+/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
 >> endobj
+103 0 obj <<
+/Type /Annot
+/Subtype /Link
+/Border[0 0 0]/H/I/C[0 1 0]
+/Rect [95.91 78.109 116.302 88.982]
+/A << /S /GoTo /D (cite.Abrahams+Gurtovoy:2004:TemplateMetaprogramming) >>
+>> endobj
+108 0 obj <<
+/D [86 0 R /XYZ 71 757.862 null]
+>> endobj
 109 0 obj <<
-/D [86 0 R /XYZ 72 233.793 null]
+/D [86 0 R /XYZ 72 720 null]
 >> endobj
-110 0 obj <<
-/D [86 0 R /XYZ 96.907 235.784 null]
+2 0 obj <<
+/D [86 0 R /XYZ 72 516.316 null]
 >> endobj
-112 0 obj <<
-/D [86 0 R /XYZ 131.895 184 null]
+6 0 obj <<
+/D [86 0 R /XYZ 72 184.859 null]
 >> endobj
-97 0 obj <<
-/Font << /F72 101 0 R /F77 102 0 R /F20 103 0 R /F54 104 0 R /F49 105 0 R /F93 106 0 R /F94 107 0 R /F95 108 0 R /F8 111 0 R /F102 113 0 R /F104 114 0 R >>
+106 0 obj <<
+/Font << /F64 110 0 R /F69 111 0 R /F20 112 0 R /F77 113 0 R /F82 114 0 R /F89 115 0 R /F90 116 0 R /F91 117 0 R /F8 118 0 R >>
 /ProcSet [ /PDF /Text ]
[TRUNCATED]

To get the complete diff run:
    svnlook diff /svnroot/rcpp -r 3245


More information about the Rcpp-commits mailing list