Example of iterating enums.
If you place enems to be iterated under special sub-namespace like
mygame.reflected you can use
#Reflect mygame.reflected and it should be cheap.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
Namespace test #Import "<std>" #Reflect test Using std.. ' to be reflected ' Enum Flags A, B, C End Function Main() For Local enumItem:=Eachin IteratingEnum<Flags>() Print "enum: "+enumItem Next End ' helper function ' Function IteratingEnum<T>:EnumContainer<T>() Return New EnumContainer<T> End Class EnumContainer<T> Method All:EnumIterator<String>() Local type:=Typeof<T> Local items:=New StringStack For Local decl:=Eachin type.GetDecls() items.Add( decl.Name ) Next ' we can cache items here Return New EnumIterator<String>( items ) End Class EnumIterator<T> Method New( items:Stack<T> ) _items=items End Property AtEnd:Bool() Return _index=_items.Length End Property Current:T() Return _items[_index] End Method Bump() _index+=1 End Private Field _items:Stack<T> Field _index:=0 End End |
Output: