Ideal implementation would have hash and == inside parseEnum, but mixin stops
working in this way. Looks like yet another bug
import tables
import hashes
import strutils
proc genTableForEnum[T: enum](): Table[string, T] =
result = initTable[string, T](rightSize(ord(high(T)) - ord(low(T)) + 1))
for i in items(T):
# TODO: ignore holes
result[$i] = i
proc hash(s: string): Hash {.inline.} =
hashIgnoreStyle(s)
proc `==`(s1, s2: string): bool {.inline.} =
cmpIgnoreStyle(s1, s2) == 0
proc parseEnum*[T: enum](s: string): T =
const enumTable = genTableForEnum[T]()
enumTable[s]
- strutils.parseEnum is slow. Parashurama
- Re: strutils.parseEnum is slow. def
- Re: strutils.parseEnum is slow. cdome
- Re: strutils.parseEnum is slow. Parashurama
- Re: strutils.parseEnum is slow. yglukhov
- Re: strutils.parseEnum is slow. Parashurama
- Re: strutils.parseEnum is slow. Araq
- Re: strutils.parseEnum is slow. cdome
- Re: strutils.parseEnum is slow. Araq
- Re: strutils.parseEnum is slow. cdome
- Re: strutils.parseEnum is slow. cdome
- Re: strutils.parseEnum is slow. cdome
