1 /*
2 Header file for using internal C-level facilities
3 provided by xts.
4 
5 This is not 100% designed for end users, so
6 any user comments and bug reports are very
7 welcomed.
8 
9 Copyright 2008 - 2014 Jeffrey A. Ryan
10 Copyright        2014 Dirk Eddelbuettel
11 
12 This source is distributed with the same license
13 as the full xts software, GPL (>= 2).
14 */
15 
16 #ifndef _XTS_API_H
17 #define _XTS_API_H
18 
19 #include <xts.h>		// also includes R.h, Rinternals.h, Rdefines.h
20 
21 #include <Rconfig.h>
22 #include <R_ext/Rdynload.h>
23 
24 #ifdef HAVE_VISIBILITY_ATTRIBUTE
25   # define attribute_hidden __attribute__ ((visibility ("hidden")))
26 #else
27   # define attribute_hidden
28 #endif
29 
30 #ifdef __cplusplus
31 extern "C" {
32 #endif
33 
34 /*
35   To aid those looking for answers on interfacing compiled code from
36   another package.
37 
38   This is simply constructing a function pointer for use.
39 
40   static RETURNTYPE(*fun)(ARG1,ARG2) = NULL     where ARGS are the types accepted, comma seperated
41     fun = ( RETURNTYPE(*)(ARG1,ARG2)) R_GetCCallable("PACKAGENAME", "FUNCTIONNAME")
42 
43 */
xtsIs(SEXP x)44 SEXP attribute_hidden xtsIs(SEXP x) {
45   static SEXP(*fun)(SEXP) = (SEXP(*)(SEXP)) R_GetCCallable("xts","isXts");
46   return fun(x);
47 }
48 
xtsIsOrdered(SEXP x,SEXP increasing,SEXP strictly)49 SEXP attribute_hidden xtsIsOrdered(SEXP x, SEXP increasing, SEXP strictly) {
50   static SEXP(*fun)(SEXP,SEXP,SEXP) = (SEXP(*)(SEXP,SEXP,SEXP)) R_GetCCallable("xts","do_is_ordered");
51   return fun(x, increasing, strictly);
52 }
53 
xtsNaCheck(SEXP x,SEXP check)54 SEXP attribute_hidden xtsNaCheck(SEXP x, SEXP check) {
55   static SEXP(*fun)(SEXP,SEXP) = (SEXP(*)(SEXP,SEXP)) R_GetCCallable("xts","naCheck");
56   return fun(x, check);
57 }
58 
xtsTry(SEXP x)59 SEXP attribute_hidden xtsTry(SEXP x) {
60     static SEXP(*fun)(SEXP) = (SEXP(*)(SEXP)) R_GetCCallable("xts","tryXts");
61     return fun(x);
62 }
63 
xtsRbind(SEXP x,SEXP y,SEXP dup)64 SEXP attribute_hidden xtsRbind(SEXP x, SEXP y, SEXP dup) {
65     static SEXP(*fun)(SEXP, SEXP, SEXP) =
66       (SEXP(*)(SEXP,SEXP,SEXP)) R_GetCCallable("xts","do_rbind_xts");
67     return fun(x, y, dup);
68 }
69 
xtsCoredata(SEXP x)70 SEXP attribute_hidden xtsCoredata(SEXP x) {
71     static SEXP(*fun)(SEXP) = (SEXP(*)(SEXP)) R_GetCCallable("xts","coredata_xts");
72     return fun(x);
73 }
74 
xtsLag(SEXP x,SEXP k,SEXP pad)75 SEXP attribute_hidden xtsLag(SEXP x, SEXP k, SEXP pad) {
76     static SEXP(*fun)(SEXP,SEXP,SEXP) = (SEXP(*)(SEXP,SEXP,SEXP)) R_GetCCallable("xts","lagXts");
77     return fun(x, k, pad);
78 }
79 
xtsMakeIndexUnique(SEXP x,SEXP eps)80 SEXP attribute_hidden xtsMakeIndexUnique(SEXP x, SEXP eps) {
81     static SEXP(*fun)(SEXP,SEXP) = (SEXP(*)(SEXP,SEXP)) R_GetCCallable("xts","make_index_unique");
82     return fun(x, eps);
83 }
84 
xtsMakeUnique(SEXP x,SEXP eps)85 SEXP attribute_hidden xtsMakeUnique(SEXP x, SEXP eps) {
86     static SEXP(*fun)(SEXP,SEXP) = (SEXP(*)(SEXP,SEXP)) R_GetCCallable("xts","make_unique");
87     return fun(x, eps);
88 }
89 
xtsEndpoints(SEXP x,SEXP on,SEXP k,SEXP addlast)90 SEXP attribute_hidden xtsEndpoints(SEXP x, SEXP on, SEXP k, SEXP addlast) {
91     static SEXP(*fun)(SEXP,SEXP,SEXP,SEXP) =
92       (SEXP(*)(SEXP,SEXP,SEXP,SEXP)) R_GetCCallable("xts","endpoints");
93     return fun(x, on, k, addlast);
94 }
95 
xtsMerge(SEXP x,SEXP y,SEXP all,SEXP fill,SEXP retclass,SEXP colnames,SEXP suffixes,SEXP retside,SEXP check_names,SEXP env,SEXP coerce)96 SEXP attribute_hidden xtsMerge(SEXP x, SEXP y, SEXP all, SEXP fill, SEXP retclass,
97                                SEXP colnames, SEXP suffixes, SEXP retside, SEXP check_names,
98                                SEXP env, SEXP coerce) {
99     static SEXP(*fun)(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP) =
100       (SEXP(*)(SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP,SEXP)) R_GetCCallable("xts","do_merge_xts");
101     return fun(x, y, all, fill, retclass, colnames, suffixes, retside, check_names, env, coerce);
102 }
103 
xtsNaOmit(SEXP x)104 SEXP attribute_hidden xtsNaOmit(SEXP x) {
105     static SEXP(*fun)(SEXP) = (SEXP(*)(SEXP)) R_GetCCallable("xts","na_omit_xts");
106     return fun(x);
107 }
108 
xtsNaLocf(SEXP x,SEXP fromLast,SEXP maxgap,SEXP limit)109 SEXP attribute_hidden xtsNaLocf(SEXP x, SEXP fromLast, SEXP maxgap, SEXP limit) {
110     static SEXP(*fun)(SEXP,SEXP,SEXP,SEXP) =
111       (SEXP(*)(SEXP,SEXP,SEXP,SEXP)) R_GetCCallable("xts","na_locf");
112     return fun(x, fromLast, maxgap, limit);
113 }
114 
115 #ifdef __cplusplus
116 }
117 #endif
118 
119 #endif /* !_XTS_API_H */
120