// // Shuffle_Vector: C // void Shuffle_Vector(REBVAL *vect, REBOOL secure) { REBCNT n; REBCNT k; REBU64 swap; REBYTE *data = SER_DATA_RAW(VAL_SERIES(vect)); REBCNT type = VECT_TYPE(VAL_SERIES(vect)); REBCNT idx = VAL_INDEX(vect); // We can do it as INTS, because we just deal with the bits: if (type == VTSF32) type = VTUI32; else if (type == VTSF64) type = VTUI64; for (n = VAL_LEN_AT(vect); n > 1;) { k = idx + (REBCNT)Random_Int(secure) % n; n--; swap = get_vect(type, data, k); set_vect(type, data, k, get_vect(type, data, n + idx), 0); set_vect(type, data, n + idx, swap, 0); } }
void Set_Vector_Row(REBSER *ser, REBVAL *blk) { REBCNT idx = VAL_INDEX(blk); REBCNT len = VAL_LEN_AT(blk); RELVAL *val; REBCNT n = 0; REBCNT bits = VECT_TYPE(ser); REBI64 i = 0; REBDEC f = 0; if (IS_BLOCK(blk)) { val = VAL_ARRAY_AT(blk); for (; NOT_END(val); val++) { if (IS_INTEGER(val)) { i = VAL_INT64(val); if (bits > VTUI64) f = (REBDEC)(i); } else if (IS_DECIMAL(val)) { f = VAL_DECIMAL(val); if (bits <= VTUI64) i = (REBINT)(f); } else fail (Error_Invalid_Arg_Core(val, VAL_SPECIFIER(blk))); //if (n >= ser->tail) Expand_Vector(ser); set_vect(bits, SER_DATA_RAW(ser), n++, i, f); } } else { REBYTE *data = VAL_BIN_AT(blk); for (; len > 0; len--, idx++) { set_vect( bits, SER_DATA_RAW(ser), n++, cast(REBI64, data[idx]), f ); } } }
// // Poke_Vector_Fail_If_Locked: C // void Poke_Vector_Fail_If_Locked( REBVAL *value, const REBVAL *picker, const REBVAL *poke ) { REBSER *vect = VAL_SERIES(value); FAIL_IF_LOCKED_SERIES(vect); REBINT n; if (IS_INTEGER(picker) || IS_DECIMAL(picker)) n = Int32(picker); else fail (Error_Invalid_Arg(picker)); n += VAL_INDEX(value); if (n <= 0 || cast(REBCNT, n) > SER_LEN(vect)) fail (Error_Out_Of_Range(picker)); REBYTE *vp = SER_DATA_RAW(vect); REBINT bits = VECT_TYPE(vect); REBI64 i; REBDEC f; if (IS_INTEGER(poke)) { i = VAL_INT64(poke); if (bits > VTUI64) f = cast(REBDEC, i); else { // !!! REVIEW: f was not set in this case; compiler caught the // unused parameter. So fill with distinctive garbage to make it // easier to search for if it ever is. f = -646.699; } } else if (IS_DECIMAL(poke)) { f = VAL_DECIMAL(poke); if (bits <= VTUI64) i = cast(REBINT, f); } else fail (Error_Invalid_Arg(poke)); set_vect(bits, vp, n - 1, i, f); }
static void iso_projection(t_data *d, t_coord p, t_coord c, t_coord n) { t_map *m; t_coord par; t_coord a; t_coord b; t_coord alt; m = &(d->map); alt.x = m->dot[p.y][p.x].x * m->altz * m->dist / 20; alt.y = m->dot[p.y + n.y][p.x + n.x].x * m->altz * m->dist / 20; par.x = (WIN_W / 2 * d->proj) + m->dch - (m->wth * m->dist / 2); par.y = (WIN_H / 2) - alt.x + m->dcv - (m->hgt * m->dist / 2); a = set_coord((((p.x - p.y) * m->dist * d->proj) + par.x) / d->proj , ((p.x + p.y) * m->dist * d->proj / 2) + par.y); par.y = (WIN_H / 2) - alt.y + m->dcv - (m->hgt * m->dist / 2); b = set_coord((((p.x + c.x - p.y) * m->dist * d->proj) + par.x) / d->proj , ((p.x + c.y + p.y) * m->dist * d->proj / 2) + par.y); draw_line(d, a, b, set_vect(p, n)); }