On 14/04/2013 04:25, Marvin Humphrey wrote:
Good point.  How about a symbolic value, `DONE`, or in full,
`CFISH_CBITER_DONE` and eventually also `CFISH_STRITER_DONE`?

+1

After reaching the end of the string, I can see two options which both have
their pros and cons:

     * Change to a new iterator state ("beyond string boundary") and throw
       an exception on every subsequent access (like in your example below).
     * Keep returning the sentinel value on calls to Next() but allow to
       move backward via Prev(). This can result in an infinite loop in
       faulty code.

I don't have a strong opinion.

I lean towards the second option.

What do you think of putting a flag into CharBuf/String which indicates how it
should deallocated?

     void
     CB_destroy(CharBuf *self) {
         if (!(self->flags & CB_HEAP_ALLOCATED)) {
             THROW(ERR, "Can't Destroy non-heap-allocated CharBuf");
         }
         ...
     }

That would allow us to get rid of the Zombie classes.  Rationale: using
subclassing to control memory allocation is odd, plus the name "Zombie" isn't
the greatest.

I think it's a good idea but I wouldn't want to waste a whole word in the CharBuf struct just for a single flag.

Nick


Reply via email to