Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2006-10-05 23:47:47


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

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk