64 lines
1.1 KiB
Plaintext
64 lines
1.1 KiB
Plaintext
'DEEP COPY FOR A RECURSIVE TREE STRUCTURE
|
|
|
|
uses console
|
|
|
|
class branches
|
|
'
|
|
static int count
|
|
int level
|
|
int a,b,c
|
|
branches*branch1
|
|
branches*branch2
|
|
'
|
|
method constructor(int n)
|
|
=========================
|
|
level=n
|
|
count++
|
|
output count tab level cr
|
|
if level>0
|
|
new branches n1(n-1)
|
|
new branches n2(n-1)
|
|
@branch1=@n1
|
|
@branch2=@n2
|
|
endif
|
|
...
|
|
end method
|
|
'
|
|
method destructor
|
|
=================
|
|
if level>0
|
|
del branch1
|
|
del branch2
|
|
endif
|
|
...
|
|
end method
|
|
'
|
|
method RecurseCopy(int n, branches *dc, *sc)
|
|
============================================
|
|
dc.level=sc.level
|
|
dc.a=sc.a
|
|
dc.b=sc.b
|
|
dc.c=sc.c
|
|
if n>0
|
|
RecurseCopy n-1, byval @dc.branch1, byval @sc.branch1
|
|
RecurseCopy n-1, byval @dc.branch2, byval @sc.branch2
|
|
endif
|
|
end method
|
|
'
|
|
method DeepCopy() as branches*
|
|
==============================
|
|
new branches dc(level)
|
|
RecurseCopy level,dc,this
|
|
return @dc
|
|
end method
|
|
'
|
|
end class
|
|
|
|
output "count" tab "level" tab "(original)" cr
|
|
new branches br(3)
|
|
output "count" tab "level" tab "(copy)" cr
|
|
branches *bc = br.DeepCopy
|
|
pause
|
|
del bc
|
|
del br
|