
David Abrahams <dave <at> boost-consulting.com> writes: [snip]
I need to modify that sequence internally.
You don't mean that, exactly, since all metadata is immutable.
Right, I mean that I can't use e.g. push_front on some sequences.
If any sequence was allowed (including immutable ones), I would need to copy that sequence into an mpl::list<> first.
Why an mpl::list<>? What's special about that structurue? Why not mpl::vector?
The sequence just needs to support certain operations, e.g. push_front, reverse, etc. So, mpl::vector<> should work too (I never checked).
Are you sure you couldn't get away with using some views onto the original sequence?
I'm not. Views are something I probably need to try when I get the time to make compilation time optimizations.
I suspect that the copying slows down compilation noticeably (I never had the chance to make measurements, so this may well be FUD), so I figured that requiring a list is the best way to give the user the opportunity to keep compilation as fast as possible.
It's not; a vector would be faster.
Ok, that's good to know.
Or you could just require any front extensible sequence, in which case, maybe deque is what you need?
Don't know, I can't think of anything that would keep you from using deque or vector. I guess it would be best to document the exact requirements and make measurements so that I can tell the user which of the standard mpl sequences are best.
Sure, I could make a copy only if the user doesn't pass an mpl::list<> and document that in the interface but nobody has ever made a request in this direction. I guess this is due to the fact that pretty much everybody specifies the InnerInitial states inline:
struct Y; struct Z; struct X : sc::simple_state< X, Machine, mpl::list< Y, Z > > {};
Why mpl::list and not mpl::vector or mpl::deque?
See above. All of them should work.
That is, I can't really think of a real-world example where you would want to use an algorithm to fill that list...
Would you allow any mpl sequence anyway?
I certainly wouldn't require a list. Whether to accept every possible sequence is another question. I'm sure there are many models of the concept you actually need from the user.
Agreed, an appropriate item is now on my to-do list. Thanks & Regards, -- Andreas Huber When replying by private email, please remove the words spam and trap from the address shown in the header.