static int exec_minus(strm_stream* strm, int argc, strm_value* args, strm_value* ret) { if (argc == 1) { if (strm_int_p(args[0])) { *ret = strm_int_value(-strm_value_int(args[0])); return STRM_OK; } if (strm_flt_p(args[0])) { *ret = strm_flt_value(-strm_value_flt(args[0])); return STRM_OK; } return STRM_NG; } assert(argc == 2); if (strm_int_p(args[0]) && strm_int_p(args[1])) { *ret = strm_int_value(strm_value_int(args[0])-strm_value_int(args[1])); return STRM_OK; } if (strm_num_p(args[0])) { *ret = strm_flt_value(strm_value_flt(args[0])-strm_value_flt(args[1])); return STRM_OK; } return STRM_NG; }
static int exec_plus(strm_state* state, int argc, strm_value* args, strm_value* ret) { assert(argc == 2); if (strm_str_p(*args)) { strm_string *str1 = strm_value_str(args[0]); strm_string *str2 = strm_value_str(args[1]); strm_string *str3 = strm_str_new(NULL, str1->len + str2->len); char *p; p = (char*)str3->ptr; memcpy(p, str1->ptr, str1->len); memcpy(p+str1->len, str2->ptr, str2->len); p[str3->len] = '\0'; *ret = strm_ptr_value(str3); return STRM_OK; } if (strm_int_p(args[0]) && strm_int_p(args[1])) { *ret = strm_int_value(strm_value_int(args[0])+strm_value_int(args[1])); return STRM_OK; } if (strm_num_p(args[0])) { *ret = strm_flt_value(strm_value_flt(args[0])+strm_value_flt(args[1])); return STRM_OK; } return STRM_NG; }
static int exec_plus(strm_stream* strm, int argc, strm_value* args, strm_value* ret) { assert(argc == 2); if (strm_string_p(*args)) { strm_string str1 = strm_value_str(args[0]); strm_string str2 = strm_value_str(args[1]); strm_string str3 = strm_str_new(NULL, strm_str_len(str1) + strm_str_len(str2)); char *p; p = (char*)strm_str_ptr(str3); memcpy(p, strm_str_ptr(str1), strm_str_len(str1)); memcpy(p+strm_str_len(str1), strm_str_ptr(str2), strm_str_len(str2)); p[strm_str_len(str3)] = '\0'; *ret = strm_str_value(str3); return STRM_OK; } if (strm_int_p(args[0]) && strm_int_p(args[1])) { *ret = strm_int_value(strm_value_int(args[0])+strm_value_int(args[1])); return STRM_OK; } if (strm_num_p(args[0])) { *ret = strm_flt_value(strm_value_flt(args[0])+strm_value_flt(args[1])); return STRM_OK; } return STRM_NG; }
enum csv_type csv_type(strm_value v) { if (strm_num_p(v)) return TYPE_NUM; if (strm_time_p(v)) return TYPE_TIME; else return TYPE_STR; }
static int exec_minus(node_ctx* ctx, int argc, strm_value* args, strm_value* ret) { if (argc == 1) { if (strm_int_p(args[0])) { *ret = strm_int_value(-strm_value_int(args[0])); return 0; } if (strm_flt_p(args[0])) { *ret = strm_flt_value(-strm_value_flt(args[0])); return 0; } return 1; } assert(argc == 2); if (strm_int_p(args[0]) && strm_int_p(args[1])) { *ret = strm_int_value(strm_value_int(args[0])-strm_value_int(args[1])); return 0; } else if (strm_num_p(args[0])) { *ret = strm_flt_value(strm_value_flt(args[0])-strm_value_flt(args[1])); return 0; } return 1; }
static int exec_mod(strm_stream* strm, int argc, strm_value* args, strm_value* ret) { assert(argc == 2); if (strm_int_p(args[0]) && strm_int_p(args[1])) { *ret = strm_int_value(strm_value_int(args[0])%strm_value_int(args[1])); return STRM_OK; } if (strm_num_p(args[0])) { *ret = strm_flt_value((int)strm_value_flt(args[0])%(int)strm_value_flt(args[1])); return STRM_OK; } return STRM_NG; }
static int exec_mult(strm_state* state, int argc, strm_value* args, strm_value* ret) { assert(argc == 2); if (strm_int_p(args[0]) && strm_int_p(args[1])) { *ret = strm_int_value(strm_value_int(args[0])*strm_value_int(args[1])); return STRM_OK; } if (strm_num_p(args[0])) { *ret = strm_flt_value(strm_value_flt(args[0])*strm_value_flt(args[1])); return STRM_OK; } return STRM_NG; }
static int ary_get(strm_stream* strm, strm_value ary, int argc, strm_value* argv, strm_value* ret) { struct strm_array* a; strm_value idx; if (argc != 1) { strm_raise(strm, "wrong number of arguments"); return STRM_NG; } a = strm_ary_struct(ary); idx = argv[0]; if (strm_num_p(idx)) { strm_int i = strm_value_int(idx); if (i>=a->len) return STRM_NG; *ret = a->ptr[i]; return STRM_OK; } if (strm_string_p(idx)) { if (a->headers) { strm_int i, len = a->len; for (i=0; i<len; i++) { if (strm_str_eq(strm_value_str(idx), strm_value_str(strm_ary_ptr(a->headers)[i]))) { *ret = a->ptr[i]; return STRM_OK; } } } } return STRM_NG; }