Boost logo

Boost :

From: Philippe A. Bouchard (philippe_at_[hidden])
Date: 2003-07-28 09:13:22


Brock Peabody wrote:

>
>
>> -----Original Message-----
>> From: boost-bounces_at_[hidden]
> [mailto:boost-bounces_at_[hidden]]
>> On Behalf Of Philippe A. Bouchard
>> Sent: Monday, July 28, 2003 6:08 AM
>> To: boost_at_[hidden]
>> Subject: [boost] Re: Re: GUI/GDI template library
>>
>
> [...]
>
>> By the way, this should be defined in the Boost Library:
>>
>> template <typename T>
>> struct tree
>> {
>> list<T> element;
>> list<tree> children;
>> };
>>
>> You get the idea that you have more control of how you wish to
> represent
>> you
>> container data & individual entries this way.
>
> If you want to (and you will) you can go crazy with the static types of
> the tree nodes. I'd recommend using some sort of mpl type list to
> define the structure of the tree and callbacks to generate the actual
> nodes at runtime - you don't necessarily want to have to generate them
> all at once.

Yes I know, this could be defined by another property what to do when you
expand a sub-list:

template <typename T>
        struct tree
        {
                list<T> element;
                list<tree> children;
        };

template <typename T>
        struct filesystem
        {
                filesystem * parent; // Important generic property,
                                        // like an ownership smart pointer.
                                        // BTW shifted_ptr<> could handle
                                        // parent_of(new (so) filesystem(this)).

                DIR * d;
                bool open;

                list<T> element;
                list<filesystem> children;
        };

This could be abstracted in a better way but the container could be defined
like this to handle read & non-read sub directories.

> I've got a tree built on top of the windows tree control that takes a
> type tree to specify its layout. You also need to be able to specify
> recursive tree structures statically since things like paths may be
> arbitrarily deep. You can access children by specifying the values of
> its parent nodes (assuming everything is less-than-comparable). All of
> the access functions can be generated as part of the compile time
> structure of the tree. If this doesn't make sense I can dig up some
> sample code. It wasn't pleasant but I got it to work under VC 6.

struct tree<> is recursive: list<tree> children. Why I like it this way is
because it is exactly like other containers and can be used for other
purposes. You could define any element type you want:

tree<lineedit>, tree<checkbox>, tree<label>, tree<pixmap_label> or tree<
..._ptr<mytype> > if the design is chosen upon smart pointers for widget
creation.

-- 
Philippe A. Bouchard

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