static int Check_Char_Range(REBVAL *val, REBINT limit) { REBCNT len; if (IS_CHAR(val)) { if (VAL_CHAR(val) > limit) return R_FALSE; return R_TRUE; } if (IS_INTEGER(val)) { if (VAL_INT64(val) > limit) return R_FALSE; return R_TRUE; } len = VAL_LEN_AT(val); if (VAL_BYTE_SIZE(val)) { REBYTE *bp = VAL_BIN_AT(val); if (limit == 0xff) return R_TRUE; // by definition for (; len > 0; len--, bp++) if (*bp > limit) return R_FALSE; } else { REBUNI *up = VAL_UNI_AT(val); for (; len > 0; len--, up++) if (*up > limit) return R_FALSE; } return R_TRUE; }
static void reverse_string(REBVAL *value, REBCNT len) { REBCNT n; REBCNT m; REBUNI c; if (VAL_BYTE_SIZE(value)) { REBYTE *bp = VAL_BIN_AT(value); for (n = 0, m = len-1; n < len / 2; n++, m--) { c = bp[n]; bp[n] = bp[m]; bp[m] = (REBYTE)c; } } else { REBUNI *up = VAL_UNI_AT(value); for (n = 0, m = len-1; n < len / 2; n++, m--) { c = up[n]; up[n] = up[m]; up[m] = c; } } }