From: TimePath Date: Sun, 19 Jun 2016 06:59:14 +0000 (+1000) Subject: Unsafe: allow field casting X-Git-Tag: xonotic-v0.8.2~781 X-Git-Url: https://git.rm.cloudns.org/?a=commitdiff_plain;h=70b91b306d9504bad3fc23bb6d7876e55f1260f2;p=xonotic%2Fxonotic-data.pk3dir.git Unsafe: allow field casting --- diff --git a/qcsrc/lib/unsafe.qh b/qcsrc/lib/unsafe.qh index 97e1c7958..60ad3d88d 100644 --- a/qcsrc/lib/unsafe.qh +++ b/qcsrc/lib/unsafe.qh @@ -1,10 +1,13 @@ #pragma once #define reinterpret_cast(T, it) _unsafe_cast_##T(0, it) -#define X(T) T _unsafe_cast_##T(int dummy, ...) { return ...(0, T); } +#define X(T) \ + T _unsafe_cast_##T(int dummy, ...) { return ...(0, T); } \ + USING(T##_fld, .T); T##_fld _unsafe_cast_##T##_fld(int dummy, ...) { return ...(0, T##_fld); } X(bool) X(int) X(float) +X(vector) X(entity) X(string) USING(rawfunc, float(...)); @@ -24,3 +27,5 @@ STATIC_INIT(INTEGER_ONE) { INTEGER_ONE = reinterpret_cast(int, _unsafe_fld2) - reinterpret_cast(int, _unsafe_fld1); } + +#define ARRAY_INDEX(T, arr, idx) (reinterpret_cast(T##_fld, reinterpret_cast(int, arr[0]) + FTOI(idx)))