For code clarity (and performance?), we should ditch the make_generator<Stream> in favour of making the streams into generators directly.
Tasks (Internal/IO)
Tasks (Domain)
This can be further extended to make the domain_set(varcount) an O(1) space operation which is always computed on-the-fly.
For code clarity (and performance?), we should ditch the
make_generator<Stream>in favour of making the streams into generators directly.Tasks (Internal/IO)
operator()tointernal::file_streamwhich wraps apull()into anoptional<T>.::generator()tointernal::file_streamthat returns a lambda with a reference tothis.::generator(bool reverse)tointernal::filethat creates a (mutable) lambda that carries theinternal::file_stream<>inside of it.make_generator<Stream>; use the stream directly if possible (e.g.zdd_complement()) or one of the above static functions (preferably the one oninternal::file).Tasks (Domain)
domain_generator(bool reverse)to public API usinginternal::file<domain_var>::generator().This can be further extended to make the
domain_set(varcount)an O(1) space operation which is always computed on-the-fly.