Boost logo

Boost :

Subject: [boost] [fusion] flat fusion sequence of all the node of a type
From: vicente.botet (vicente.botet_at_[hidden])
Date: 2010-05-24 18:42:38


Hi,

I want to create a fusion sequence that give access to all the nodes of a struct/class/array that inherit from a given class TO.
If we remove this constraint, the fusion sequence can be seen as flattening the tree of nodes in a given order. Once I will have this I can use filter_if<is_base_of<TO,_> >

Given
class TO;
struct W {
    TO t;
};
struct X : TO { // direct
    TO* to_ptr;
    char c;
};
struct Y : TO { // direct with embeddeds
    X x;
    int i;
};
struct Z { // with embeddeds
    Y y[2];
    TO t;
    W w;
};

Z z;

the flat view corrsponds to

z.w.t, z.w, z.t, z.y[0].x.to_ptr, z.y[0].x.c, z.y[0].x, z.y[0], z.y[1].x.to_ptr, z.y[1].x.c, z.y[1].x, z.y[1], z.y, z

The filtered view corrsponds to

Y z.y[0]
X z.y[0].x
Y z.y[1]
X z.y[1].x
TO z.t
TO z.w.t

If I have fusion sequence struct adaptors for W, X, Y, Z. Is there a simple and run-time efficient way to get this fusion sequence adaptor or I need to do something similar to the struct adaptor? Have others had a similar need already?

Best,
Vicente

P.S. For my personal usage I need only a forward sequence.


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