
The idea of segmented fusion sequences and algorithms has been discussed here several times, and Joel has made some reference to some earlier work I did in this area. I had done some tests at the time that suggested that a segmented sequences and algorithms could significantly outperform nonsegmented variants Fusion currently uses. Per Joel's suggestion, I went ahead and checked my code into CVS HEAD. All segmented-specific code is quarantined in separate ext_ directories. What I've just checked in: - fusion/algorithm/iteration/ext_/for_each_s.hpp for_each_s algorithm that works with segmented sequences - fusion/algorithm/query/ext_/find_if_s.hpp find_if_s algorithm that works with segmented sequences, and returns segmented iterators - fusion/sequence/container/ext_/tree.hpp Experimental segmented fusion tree - fusion/sequence/intrinsic/ext_/segments.hpp The segments() intrinsic for getting a segmented sequences' segments. - fusion/sequence/view/ext_/multiple_view.hpp Makes a value v appear as a tuple<V,V,V...>(v,v,v...) - fusion/sequence/view/ext_/segmented_iterator.hpp A generic segmented iterator that remembers its place in the traversal of any segmented sequence. - fusion/sequence/view/ext_/segmented_iterator_range.hpp Makes iterator_range of segmented_iterators a segmented range. - fusion/support/ext_/is_segmented.hpp The is_segmented trait. I've also checked in some basic tests for this stuff, and marked them "explicit" in the test Jamfile so they won't interfere with regular regression testing. I have not changed *any* standard Fusion files. If we decide to rip this out, it's as simple as nuking all the ext_ directories. Caveat: this stuff is half-baked. Use at your own risk. The hope is that by checking this in, others will take an interest and help flesh the implementation out, so dig in! -- Eric Niebler Boost Consulting www.boost-consulting.com