25 #include "valuevar.hpp"
26 #include "interp_error.hpp"
44 val::Value is_infinite(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
45 val::Value all_equal(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
47 val::Value as_logical(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
48 val::Value as_integer(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
49 val::Value as_numeric(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
50 val::Value as_character(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
51 val::Value as_duration(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
52 val::Value as_period(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
54 val::Value as_interval(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
55 val::Value make_time(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
56 val::Value make_period(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
57 val::Value period_month(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
58 val::Value period_day(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
59 val::Value period_duration(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
61 val::Value character(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
62 val::Value _interval(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
63 val::Value interval_start(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
64 val::Value interval_end(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
65 val::Value interval_sopen(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
66 val::Value interval_eopen(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
75 val::Value make_connection(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
76 val::Value connection_port(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
77 val::Value connection_address(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
78 val::Value make_timer(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
82 val::Value zts_resize(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
83 val::Value zts_truncate(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
84 val::Value make_vector(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
85 val::Value make_matrix(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
86 val::Value make_array(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
94 val::Value dblsubset(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
95 val::Value subassign(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
96 val::Value dblsubassign(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
97 val::Value get_typeof(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
100 val::Value _sort_idx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
101 val::Value is_ordered(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
106 val::Value set_seed(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
108 val::Value alloc_dirname(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
111 val::Value islocked(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
113 val::Value dyn_load(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
114 val::Value _options(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
119 val::Value read_csv(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
121 val::Value write_csv(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
123 val::Value dimnames(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
124 val::Value colnames(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
125 val::Value rownames(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
133 val::Value tryCatch(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
138 val::Value stats_net(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
139 val::Value stats_msg(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
140 val::Value stats_ctx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
141 val::Value info_net(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
142 val::Value info_msg(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
143 val::Value info_ctx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
159 val::Value _ceiling(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
164 val::Value rollmean(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
190 val::Value sys_time(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
195 val::Value intersect(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
198 val::Value intersect_idx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
199 val::Value union_idx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
200 val::Value setdiff_idx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
203 val::Value align_idx(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
208 val::Value daymonth(vector<val::VBuiltinG::arg_t>& v,
zcore::InterpCtx& ic);
215 template <
template<
typename...>
class F,
typename... T>
216 inline val::Value apply_to_types(val::Value& v,
const yy::location& l) {
219 template <
template<
typename...>
class F, val::ValType H, val::ValType... T>
220 inline val::Value apply_to_types(val::Value& v,
const yy::location& l) {
221 return H == v.which() ? F<typename val::gettype<H>::TP>::f(v, l) : apply_to_types<F, T...>(v, l);
224 template <
template<
typename,
typename FA1>
class F,
225 typename FA1,
typename... T>
226 inline val::Value apply_to_types2(val::Value& v, FA1 a1,
230 template <
template<
typename,
typename FA1>
class F,
231 typename FA1, val::ValType H, val::ValType... T>
232 inline val::Value apply_to_types2(val::Value& v, FA1 a1,
234 return H == v.which() ? F<typename val::gettype<H>::TP, FA1>::f(v, a1, lv, l1) :
235 apply_to_types2<F, FA1, T...>(v, a1, lv, l1);
238 template <
template<
typename,
typename FA1,
typename FA2>
class F,
239 typename FA1,
typename FA2,
typename... T>
240 inline val::Value apply_to_types3(val::Value& v, FA1 a1, FA2 a2,
const yy::location& lv,
244 template <
template<
typename,
typename FA1,
typename FA2>
class F,
245 typename FA1,
typename FA2, val::ValType H, val::ValType... T>
246 inline val::Value apply_to_types3(val::Value& v, FA1 a1, FA2 a2,
248 return H == v.which() ? F<typename val::gettype<H>::TP, FA1, FA2>::f(v, a1, a2, lv, l1) :
249 apply_to_types3<F, FA1, FA2, T...>(v, a1, a2, lv, l1);
253 template <
template<
typename...>
class F,
typename... T>
254 inline val::Value apply_to_types_null(val::Value& v,
const yy::location& l) {
257 template <
template<
typename...>
class F, val::ValType H, val::ValType... T>
258 inline val::Value apply_to_types_null(val::Value& v,
const yy::location& l) {
259 return H == v.which() ? F<typename val::gettype<H>::TP>::f(v) : apply_to_types_null<F, T...>(v, l);
263 inline ssize_t getInt(
double d,
const yy::location& l) {
264 std::feclearexcept(FE_ALL_EXCEPT);
265 static_assert(
sizeof(ssize_t)==
sizeof(
long long),
"sizeof(ssize_t)==sizeof(long long)");
266 auto res = llrint(d);
267 if (std::fetestexcept(FE_INVALID)) {
270 if (std::fetestexcept(FE_INEXACT)) {
277 inline size_t getUint(
double d,
const yy::location& l) {