Am So., 11. Okt. 2020 um 14:04 Uhr schrieb Bruno Haible <br...@clisp.org>: > > Marc Nieper-Wißkirchen wrote: > > > > /* Return an independent copy of ITER that is initially in the same > > > > state. */ > > > > extern Hamt_iterator *hamt_iterator_copy (Hamt_iterator *iter); > > > > > > Then a copy function is not needed, because the user's program can do > > > > > > Hamt_iterator iter_clone = iter; > > > > The hamt itself has to be copied (to increase the reference counter). > > Then the comment should clarify what "independent" means. I thought it > means that both iterators (the original one and the copy) can be used > simultaneously, as long as the HAMT does not change. Do you mean > something broader? > - If someone creates a derivative of the HAMT, the iterator won't > be affected, right? ("persistence")
Yes. > - If someone makes destructive modifications to the HAMT (through the > *_x functions), the iterator will be affected if it has not yet > passed the point of modification, right? No, the iterator shouldn't be affected. (The point of modification is not well-defined without exposing implementation details.) > So, what is the scenario where increasing the reference count will make > a difference? If you have a language with GC like Lisp or Scheme, say, the hamt may be GC'd while the iterator is still live.