'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
   