📄 slarith.inc
字号:
{ for (n = 0; n < na; n++) c[n] = a[n] >> b[n]; } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) c[n] = a[n] >> xb; } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) c[n] = xa >> b[n]; }#endif break;#endif /* GENERIC_BIT_OPERATIONS */ case SLANG_EQ:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a == *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] == b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] == xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa == b[n]); }#endif break; case SLANG_NE:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a != *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] != b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] != xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa != b[n]); }#endif break; case SLANG_GT:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a > *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] > b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] > xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa > b[n]); }#endif break; case SLANG_GE:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a >= *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] >= b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] >= xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa >= b[n]); }#endif break; case SLANG_LT:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a < *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] < b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] < xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa < b[n]); }#endif break; case SLANG_LE:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a <= *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] <= b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] <= xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa <= b[n]); }#endif break; case SLANG_OR:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a || *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] || b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] || xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa || b[n]); }#endif break; case SLANG_AND:#if _SLANG_OPTIMIZE_FOR_SPEED < 2 for (n = 0; n < n_max; n++) { cc[n] = (*a && *b); a += da; b += db; }#else if (na == nb) { for (n = 0; n < na; n++) cc[n] = (a[n] && b[n]); } else if (nb == 1) { GENERIC_TYPE xb = *b; for (n = 0; n < na; n++) cc[n] = (a[n] && xb); } else /* if (na == 1) */ { GENERIC_TYPE xa = *a; for (n = 0; n < nb; n++) cc[n] = (xa && b[n]); }#endif break; } return 1;}#endif /* GENERIC_BINARY_FUNCTION */#ifdef GENERIC_UNARY_FUNCTIONstatic int GENERIC_UNARY_FUNCTION(int op, unsigned char a_type, VOID_STAR ap, unsigned int na, VOID_STAR bp ){ GENERIC_TYPE *a, *b; unsigned int n; int *ib; (void) a_type; a = (GENERIC_TYPE *) ap; b = (GENERIC_TYPE *) bp; switch (op) { default: return 0; case SLANG_PLUSPLUS: for (n = 0; n < na; n++) b[n] = (a[n] + 1); break; case SLANG_MINUSMINUS: for (n = 0; n < na; n++) b[n] = (a[n] - 1); break; case SLANG_CHS: for (n = 0; n < na; n++) b[n] = (GENERIC_TYPE) -(a[n]); break; case SLANG_SQR: for (n = 0; n < na; n++) b[n] = (a[n] * a[n]); break; case SLANG_MUL2: for (n = 0; n < na; n++) b[n] = (2 * a[n]); break; case SLANG_ABS: for (n = 0; n < na; n++) b[n] = ABS_FUNCTION (a[n]); break; case SLANG_SIGN: ib = (int *) bp; for (n = 0; n < na; n++) ib[n] = SIGN_FUNCTION(a[n]); break;#ifdef GENERIC_BIT_OPERATIONS case SLANG_NOT: for (n = 0; n < na; n++) b[n] = !(a[n]); break; case SLANG_BNOT: for (n = 0; n < na; n++) b[n] = ~(a[n]); break;#endif } return 1;}#endif /* GENERIC_UNARY_FUNCTION */#ifdef SCALAR_BINARY_FUNCTIONstatic int SCALAR_BINARY_FUNCTION (GENERIC_TYPE a, GENERIC_TYPE b, int op){ switch (op) { default: return 1;#if SLANG_HAS_FLOAT#ifdef POW_FUNCTION case SLANG_POW: return PUSH_POW_OBJ_FUN(POW_FUNCTION(a, b));#endif#endif case SLANG_PLUS: return PUSH_SCALAR_OBJ_FUN (a + b); case SLANG_MINUS: return PUSH_SCALAR_OBJ_FUN (a - b); case SLANG_TIMES: return PUSH_SCALAR_OBJ_FUN (a * b); case SLANG_DIVIDE: if (b == 0) { SLang_Error = SL_DIVIDE_ERROR; return -1; } return PUSH_SCALAR_OBJ_FUN (a / b); case SLANG_MOD: if (b == 0) { SLang_Error = SL_DIVIDE_ERROR; return -1; } return PUSH_SCALAR_OBJ_FUN (MOD_FUNCTION(a,b));#ifdef GENERIC_BIT_OPERATIONS case SLANG_BAND: return PUSH_SCALAR_OBJ_FUN (a & b); case SLANG_BXOR: return PUSH_SCALAR_OBJ_FUN (a ^ b); case SLANG_BOR: return PUSH_SCALAR_OBJ_FUN (a | b); case SLANG_SHL: return PUSH_SCALAR_OBJ_FUN (a << b); case SLANG_SHR: return PUSH_SCALAR_OBJ_FUN (a >> b);#endif case SLANG_GT: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a > b)); case SLANG_LT: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a < b)); case SLANG_GE: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a >= b)); case SLANG_LE: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a <= b)); case SLANG_EQ: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a == b)); case SLANG_NE: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a != b)); case SLANG_OR: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a || b)); case SLANG_AND: return SLclass_push_char_obj (SLANG_CHAR_TYPE, (char)(a && b)); }}#endif /* SCALAR_BINARY_FUNCTION */#ifdef CMP_FUNCTIONstatic int CMP_FUNCTION (unsigned char unused, VOID_STAR a, VOID_STAR b, int *c){ GENERIC_TYPE x, y; (void) unused; x = *(GENERIC_TYPE *) a; y = *(GENERIC_TYPE *) b; if (x > y) *c = 1; else if (x == y) *c = 0; else *c = -1; return 0;}#endif#undef CMP_FUNCTION#undef SCALAR_BINARY_FUNCTION#undef PUSH_POW_OBJ_FUN#undef PUSH_SCALAR_OBJ_FUN#undef GENERIC_BINARY_FUNCTION#undef GENERIC_UNARY_FUNCTION#undef GENERIC_BIT_OPERATIONS#undef GENERIC_TYPE#undef POW_FUNCTION#undef POW_RESULT_TYPE#undef MOD_FUNCTION#undef ABS_FUNCTION#undef SIGN_FUNCTION
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -