I was trying to add an items() iterator. As Nim interators do not support 
direct iteration, it can be done with a stack or references to the parent and 
the current child. As the parent reference was already there I added a cur 
index and got this, which seems to be OK:
    
    
    H[M, D: Dim; RT, LT] = ref object of RTRef[RT]
        parent: H[M, D, RT, LT]
        numEntries: int
        cur: int # for iteration
        level: int
    
    iterator items*[M, D: Dim; RT, LT](t: RTree[M, D, RT, LT]): L[D, RT, LT] =
      var el: H[M, D, RT, LT] = t.root
      assert el.parent == nil
      el.cur = 0
      while el != nil:
        if el of Leaf[M, D, RT, LT]:
          for i, o in Leaf[M, D, RT, LT](el).a:
            if i == Leaf[M, D, RT, LT](el).numEntries: break
            yield o
          el = el.parent
        elif el of Node[M, D, RT, LT]:
          if el.cur < el.numEntries:
            let h = el
            el = Node[M, D, RT, LT](el).a[el.cur].n
            assert el.parent == h
            el.cur = 0
            h.cur += 1
          else:
            el = el.parent
        else: assert false
    
    
    Run

But the initial module gives a lot of warnings, see

<https://github.com/StefanSalewski/RTree/issues/1>

The "Hint: condition is always true:" should be no problem.

For /tmp/hhh/rtree.nim(283, 24) Warning: Deprecated since v1.4; there should 
not be `high(value)`. Use `high(type)`.; high is deprecated [Deprecated]

Should I really replace

> var m0 = lx.b[0].a.high

with

> var m0 = lx.b[0].a.typeof.high ?

And the final problem which I could not fix 3 years ago is:

/tmp/hhh/rtree.nim(83, 7) Warning: Special variable 'result' is shadowed. 
[ResultShadowed]|   
---|---  
  
proc center(r: Box): auto = #BoxCenter[r.len, type(r[0].a)] =
    var result: BoxCenter[r.len, type(r[0].a)]

I am still not able to avoid the auto keyword. This does not compile:

proc center(r: Box): BoxCenter[r.len, type(r[0].a)]

Is there a trick available to avoid auto? Because I can remember a discussion 
maybe two years ago that Mr. Rumpf considers to remove the auto keyword?

Final question: In the code I am using many constructs like type(r[0].a) which 
seems to be accepted by the compiler. Should we better use typeof() like 
typeof(r[0].a) now?

Reply via email to