Beispiel #1
0
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;
}
Beispiel #2
0
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;
        }
    }
}