-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
Description
Yo
type
TVector*[T; I] = array[I, T]
const
xSwizzleChars = {'x', 'X', 'r', 'R', 's', 'S'}
ySwizzleChars = {'y', 'Y', 'g', 'G', 't', 'T'}
zSwizzleChars = {'z', 'Z', 'b', 'B', 'p', 'P'}
wSwizzleChars = {'w', 'W', 'a', 'A', 'q', 'Q'}
swizzleChars = xSwizzleChars + ySwizzleChars + zSwizzleChars + wSwizzleChars
proc swizzleImpl[I](str: string): array[I, int] {.compileTime.} =
for i, ch in str:
if ch in xSwizzleChars:
result[i] = 0
elif ch in ySwizzleChars:
result[i] = 1
elif ch in zSwizzleChars:
result[i] = 2
elif ch in wSwizzleChars:
result[i] = 3
from strutils import contains
template `{}`*[T, I](vec: TVector[T, I], str: string{lit}): expr {.deprecated.} =
when str.contains({char(0)..char(255)} - swizzleChars):
{.fatal: "Valid swizzle characters: " & $swizzleChars & ". Got: " & str.}
when str.len == 0:
{.fatal: "Cannot swizzle zero components".}
var result: TVector[vec[0].type, range[0.. <str.len]]
for i, component in swizzleImpl[0.. <str.len](str):
assert component < vec.len, "Invalid swizzle character found for " & $vec.len &
"-dimensional vector. Got: " & str
result[i] = vec[component]
result
var vec3: TVector[int, range[0..2]] = [1, 3, 37]
assert vec3{"rgbbg"} == [1, 3, 37, 37, 3]nimrod c -p:. -r linagl/anus.nim
anus.nim(39, 11) Warning: '{}' is deprecated [Deprecated]
anus.nim(39, 11) Warning: '{}' is deprecated [Deprecated]
gcc -c -w -I/home/isak/src/softlib/Nimrod/lib -o /home/isak/src/nim/linagl/src/linagl/nimcache/linagl_anus.o /home/isak/src/nim/linagl/src/linagl/nimcache/linagl_anus.c
gcc -c -w -I/home/isak/src/softlib/Nimrod/lib -o /home/isak/src/nim/linagl/src/linagl/nimcache/pure_strutils.o /home/isak/src/nim/linagl/src/linagl/nimcache/pure_strutils.c
gcc -c -w -I/home/isak/src/softlib/Nimrod/lib -o /home/isak/src/nim/linagl/src/linagl/nimcache/pure_parseutils.o /home/isak/src/nim/linagl/src/linagl/nimcache/pure_parseutils.c
gcc -o /home/isak/src/nim/linagl/src/linagl/anus /home/isak/src/nim/linagl/src/linagl/nimcache/pure_parseutils.o /home/isak/src/nim/linagl/src/linagl/nimcache/pure_strutils.o /home/isak/src/nim/linagl/src/linagl/nimcache/Nimrod_system.o /home/isak/src/nim/linagl/src/linagl/nimcache/linagl_anus.o -ldl
/home/isak/src/nim/linagl/src/linagl/nimcache/linagl_anus.o: In function anusInit': linagl_anus.c:(.text+0x23d): undefined reference toswizzleimpl_85427'
collect2: error: ld returned 1 exit status
Error: execution of an external program failed