implemented generic converters
This commit is contained in:
parent
7171ae62cb
commit
38ab30d153
7 changed files with 89 additions and 7 deletions
28
tests/compile/tsecondarrayproperty.nim
Normal file
28
tests/compile/tsecondarrayproperty.nim
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
|
||||
type
|
||||
TFoo = object
|
||||
data: array[0..100, int]
|
||||
TSecond = distinct TFoo
|
||||
|
||||
proc `[]` (self: var TFoo, x: int): var int =
|
||||
return self.data[x]
|
||||
|
||||
proc `[]=` (self: var TFoo, x, y: int) =
|
||||
# only `[]` returning a 'var T' seems to not work for now :-/
|
||||
self.data[x] = y
|
||||
|
||||
proc second(self: var TFoo): var TSecond =
|
||||
return TSecond(self)
|
||||
|
||||
proc `[]`(self: var TSecond, x: int): var int =
|
||||
return TFoo(self).data[2*x]
|
||||
|
||||
var f: TFoo
|
||||
|
||||
for i in 0..f.data.high: f[i] = 2 * i
|
||||
|
||||
echo f.second[1]
|
||||
|
||||
#echo `second[]`(f,1)
|
||||
# this is the only way I could use it, but not what I expected
|
||||
|
||||
30
tests/run/tgenericconverter.nim
Normal file
30
tests/run/tgenericconverter.nim
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
discard """
|
||||
output: '''666
|
||||
666'''
|
||||
"""
|
||||
|
||||
# test the new generic converters:
|
||||
|
||||
type
|
||||
TFoo2[T] = object
|
||||
x: T
|
||||
|
||||
TFoo[T] = object
|
||||
data: array[0..100, T]
|
||||
|
||||
converter toFoo[T](a: TFoo2[T]): TFoo[T] =
|
||||
result.data[0] = a.x
|
||||
|
||||
proc p(a: TFoo[int]) =
|
||||
echo a.data[0]
|
||||
|
||||
proc q[T](a: TFoo[T]) =
|
||||
echo a.data[0]
|
||||
|
||||
|
||||
var
|
||||
aa: TFoo2[int]
|
||||
aa.x = 666
|
||||
|
||||
p aa
|
||||
q aa
|
||||
Loading…
Add table
Add a link
Reference in a new issue