# Cpp source usage

    library(bvhar)

# For Package Developers

This package provides public C++ headers. Some might be implement these useful.

- `bvharsim.h`: Rcpp random generation functions that are widely used in Bayesian statistics.
- `ols.h`: OLS classes and structs
- `minnesota.h`: Minnesota prior classes and structs
- `mcmcsv.h`: Classes and structs for stochastic volatility models. It includes
  - Minnesota prior
  - SSVS prior
  - Horseshoe prior
- `mcmchs.h`: Horseshoe prior classes
- `mcmcssvs.h`: SSVS prior classes
- `olsforecaster.h`: Forecasting class for each VAR and VHAR
- `minnforecaster.h`: Minnesota prior forecaster classes
- `svforecaster.h`: SV models forecaster classes
- `olsspillover.h`: FEVD and spillover class for each VAR and VHAR
- `minnspillover.h`: FEVD and spillover class for Minnesota prior
- `svspillover.h`: FEVD and spillover class for SV models
- `bvharprogress.h`: Simple progress bar classes
- `bvharinterrupt.h`: Interruption handler classes

You can use these by writing in your R package DESCRIPTION:

    LinkingTo:
        BH,
        Rcpp,
        RcppEigen,
        bvhar

Also, you can use in your single `C++` source:

    // [[Rcpp::depends(BH, RcppEigen, bvhar)]]
    // [[Rcpp::plugins(bvhar)]]

You need to add `plugins` attribute because the header in this package should define `USE_RCPP` macro. Or you can use instead:

    Sys.setenv("PKG_CPPFLAGS" = "-DUSE_RCPP")

without using plugins attribute.

## MCMC headers

`mcmc*.h` has classes that can conduct MCMC. Since it is designed thread-safe, you can OpenMP for parallel multiple chain loop.

1. Initialize using smart pointer (in this package: `std::unique_ptr`)
   - Since each class requires other structure as its parameter, you first initialize it.
   - Each struct is inside the same header.
2. `doPosteriorDraws()` updates MCMC draws, so use this inside loop.
3. `returnRecords(burn, thin)` returns `Rcpp::List` of every MCMC record.

In case of SV model, you can define your own prior by defining a derived class.