// Generated from codegen/generate_FFI.sh
#include <R.h>
#include <R_ext/Rdynload.h>
#include <Rinternals.h>
#include <stdlib.h>

#include "api.h"

// clang-format off
#define CALLDEF(name, n) {#name, (DL_FUNC) &name, n}
// clang-format on

static const R_CallMethodDef CallEntries[] = {
  CALLDEF(impl_ta_ACCBANDS, 5),
  CALLDEF(impl_ta_ADOSC, 7),
  CALLDEF(impl_ta_AD, 5),
  CALLDEF(impl_ta_ADXR, 5),
  CALLDEF(impl_ta_ADX, 5),
  CALLDEF(impl_ta_APO, 5),
  CALLDEF(impl_ta_AROONOSC, 4),
  CALLDEF(impl_ta_AROON, 4),
  CALLDEF(impl_ta_ATR, 5),
  CALLDEF(impl_ta_AVGPRICE, 5),
  CALLDEF(impl_ta_BBANDS, 6),
  CALLDEF(impl_ta_BETA, 4),
  CALLDEF(impl_ta_BOP, 5),
  CALLDEF(impl_ta_CCI, 5),
  CALLDEF(impl_ta_CDL2CROWS, 6),
  CALLDEF(impl_ta_CDL3BLACKCROWS, 6),
  CALLDEF(impl_ta_CDL3INSIDE, 6),
  CALLDEF(impl_ta_CDL3LINESTRIKE, 6),
  CALLDEF(impl_ta_CDL3OUTSIDE, 6),
  CALLDEF(impl_ta_CDL3STARSINSOUTH, 6),
  CALLDEF(impl_ta_CDL3WHITESOLDIERS, 6),
  CALLDEF(impl_ta_CDLABANDONEDBABY, 7),
  CALLDEF(impl_ta_CDLADVANCEBLOCK, 6),
  CALLDEF(impl_ta_CDLBELTHOLD, 6),
  CALLDEF(impl_ta_CDLBREAKAWAY, 6),
  CALLDEF(impl_ta_CDLCLOSINGMARUBOZU, 6),
  CALLDEF(impl_ta_CDLCONCEALBABYSWALL, 6),
  CALLDEF(impl_ta_CDLCOUNTERATTACK, 6),
  CALLDEF(impl_ta_CDLDARKCLOUDCOVER, 7),
  CALLDEF(impl_ta_CDLDOJI, 6),
  CALLDEF(impl_ta_CDLDOJISTAR, 6),
  CALLDEF(impl_ta_CDLDRAGONFLYDOJI, 6),
  CALLDEF(impl_ta_CDLENGULFING, 6),
  CALLDEF(impl_ta_CDLEVENINGDOJISTAR, 7),
  CALLDEF(impl_ta_CDLEVENINGSTAR, 7),
  CALLDEF(impl_ta_CDLGAPSIDESIDEWHITE, 6),
  CALLDEF(impl_ta_CDLGRAVESTONEDOJI, 6),
  CALLDEF(impl_ta_CDLHAMMER, 6),
  CALLDEF(impl_ta_CDLHANGINGMAN, 6),
  CALLDEF(impl_ta_CDLHARAMICROSS, 6),
  CALLDEF(impl_ta_CDLHARAMI, 6),
  CALLDEF(impl_ta_CDLHIGHWAVE, 6),
  CALLDEF(impl_ta_CDLHIKKAKEMOD, 6),
  CALLDEF(impl_ta_CDLHIKKAKE, 6),
  CALLDEF(impl_ta_CDLHOMINGPIGEON, 6),
  CALLDEF(impl_ta_CDLIDENTICAL3CROWS, 6),
  CALLDEF(impl_ta_CDLINNECK, 6),
  CALLDEF(impl_ta_CDLINVERTEDHAMMER, 6),
  CALLDEF(impl_ta_CDLKICKINGBYLENGTH, 6),
  CALLDEF(impl_ta_CDLKICKING, 6),
  CALLDEF(impl_ta_CDLLADDERBOTTOM, 6),
  CALLDEF(impl_ta_CDLLONGLEGGEDDOJI, 6),
  CALLDEF(impl_ta_CDLLONGLINE, 6),
  CALLDEF(impl_ta_CDLMARUBOZU, 6),
  CALLDEF(impl_ta_CDLMATCHINGLOW, 6),
  CALLDEF(impl_ta_CDLMATHOLD, 7),
  CALLDEF(impl_ta_CDLMORNINGDOJISTAR, 7),
  CALLDEF(impl_ta_CDLMORNINGSTAR, 7),
  CALLDEF(impl_ta_CDLONNECK, 6),
  CALLDEF(impl_ta_CDLPIERCING, 6),
  CALLDEF(impl_ta_CDLRICKSHAWMAN, 6),
  CALLDEF(impl_ta_CDLRISEFALL3METHODS, 6),
  CALLDEF(impl_ta_CDLSEPARATINGLINES, 6),
  CALLDEF(impl_ta_CDLSHOOTINGSTAR, 6),
  CALLDEF(impl_ta_CDLSHORTLINE, 6),
  CALLDEF(impl_ta_CDLSPINNINGTOP, 6),
  CALLDEF(impl_ta_CDLSTALLEDPATTERN, 6),
  CALLDEF(impl_ta_CDLSTICKSANDWICH, 6),
  CALLDEF(impl_ta_CDLTAKURI, 6),
  CALLDEF(impl_ta_CDLTASUKIGAP, 6),
  CALLDEF(impl_ta_CDLTHRUSTING, 6),
  CALLDEF(impl_ta_CDLTRISTAR, 6),
  CALLDEF(impl_ta_CDLUNIQUE3RIVER, 6),
  CALLDEF(impl_ta_CDLUPSIDEGAP2CROWS, 6),
  CALLDEF(impl_ta_CDLXSIDEGAP3METHODS, 6),
  CALLDEF(impl_ta_CMO, 3),
  CALLDEF(impl_ta_CORREL, 4),
  CALLDEF(impl_ta_DEMA, 3),
  CALLDEF(impl_ta_DX, 5),
  CALLDEF(impl_ta_EMA, 3),
  CALLDEF(impl_ta_HT_DCPERIOD, 2),
  CALLDEF(impl_ta_HT_DCPHASE, 2),
  CALLDEF(impl_ta_HT_PHASOR, 2),
  CALLDEF(impl_ta_HT_SINE, 2),
  CALLDEF(impl_ta_HT_TRENDLINE, 2),
  CALLDEF(impl_ta_HT_TRENDMODE, 2),
  CALLDEF(impl_ta_IMI, 4),
  CALLDEF(impl_ta_KAMA, 3),
  CALLDEF(impl_ta_MACDEXT, 8),
  CALLDEF(impl_ta_MACDFIX, 3),
  CALLDEF(impl_ta_MACD, 5),
  CALLDEF(impl_ta_MAMA, 4),
  CALLDEF(impl_ta_MAX, 3),
  CALLDEF(impl_ta_MEDPRICE, 3),
  CALLDEF(impl_ta_MFI, 6),
  CALLDEF(impl_ta_MIDPRICE, 4),
  CALLDEF(impl_ta_MIN, 3),
  CALLDEF(impl_ta_MINUS_DI, 5),
  CALLDEF(impl_ta_MINUS_DM, 4),
  CALLDEF(impl_ta_MOM, 3),
  CALLDEF(impl_ta_NATR, 5),
  CALLDEF(impl_ta_OBV, 3),
  CALLDEF(impl_ta_PLUS_DI, 5),
  CALLDEF(impl_ta_PLUS_DM, 4),
  CALLDEF(impl_ta_PPO, 5),
  CALLDEF(impl_ta_ROCR, 3),
  CALLDEF(impl_ta_ROC, 3),
  CALLDEF(impl_ta_RSI, 3),
  CALLDEF(impl_ta_SAREXT, 11),
  CALLDEF(impl_ta_SAR, 5),
  CALLDEF(impl_ta_SMA, 3),
  CALLDEF(impl_ta_STDDEV, 4),
  CALLDEF(impl_ta_STOCHF, 7),
  CALLDEF(impl_ta_STOCHRSI, 6),
  CALLDEF(impl_ta_STOCH, 9),
  CALLDEF(impl_ta_SUM, 3),
  CALLDEF(impl_ta_T3, 4),
  CALLDEF(impl_ta_TEMA, 3),
  CALLDEF(impl_ta_TRANGE, 4),
  CALLDEF(impl_ta_TRIMA, 3),
  CALLDEF(impl_ta_TRIX, 3),
  CALLDEF(impl_ta_TYPPRICE, 4),
  CALLDEF(impl_ta_ULTOSC, 7),
  CALLDEF(impl_ta_VAR, 4),
  CALLDEF(impl_ta_VOLUME, 3),
  CALLDEF(impl_ta_WCLPRICE, 4),
  CALLDEF(impl_ta_WILLR, 5),
  CALLDEF(impl_ta_WMA, 3),
  CALLDEF(initialize_ta_lib, 0),
  CALLDEF(map_dfr_double, 1),
  CALLDEF(map_dfr_integer, 1),
  CALLDEF(reset_candle_setting, 0),
  CALLDEF(rownames_data_frame, 2),
  CALLDEF(rownames_matrix, 3),
  CALLDEF(set_candle_setting, 4),
  CALLDEF(shutdown_ta_lib, 0),
  {NULL, NULL, 0}};

void R_init_talib(DllInfo *dll) {
  R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
  R_useDynamicSymbols(dll, FALSE);
  R_forceSymbols(dll, TRUE);
}
