$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Vladimir Prus (ghost_at_[hidden])
Date: 2003-06-23 02:06:16
Hi Bruce,
Bruce Barr wrote:
> I'm glad Vladimir got me to take another look at this.
> I'm submitting a new patch to replace the one
> submitted on May 30.
And I'm glad you're willing to polish your patch!
> There are other differences between the recursive and
> nonrecursive versions that, in my opinion, are good or
> necessary.
>
> 1) The objects color, u, ei, and ei_end are only
> created/destroyed once instead of at every level of
> recursion.
I think that for 'u', you might have two invocations of copy constructor: when
pushing to the stack and when popping ;-) But that's not every level of
recursion anyway.
> 2) The overall number of constructions/destructions
> for types Vertex and Iter is different. It's possible
> for client code to depend on something like that, but
> I think trying to support that sort of code is going
> overboard.
Agree.
> Here are some pseudo-FAQ's to explain some other
> details.
>
> Q) Why is the statement
> 'stack.reserve(num_vertices(g));' commented out?
>
> A) Because premature optimization is bad. Anyway,
> only the library user could know what the ideal
> capacity of the stack vector is. num_vertices(g)
> might be way too high. Maybe the argument for reserve
> could be passed in as a parameter someday.
>
> Q) Why use nested pairs for VertexInfo instead of
> tuples?
>
> A) Only because out_edges() returns a pair. Tuples
> probably would have been just as good.
There's another question: why store "u" at all. I'm guessing
"source(*ei, g)" might be more efficient?
I'm thinking we have some technical questions left to apply your patch.
1. It needs license from you. Either the standard one:
// (C) Copyright Bruce Barr, 2003
// Permission to copy, use, modify, sell and distribute this software
// is granted provided this copyright notice appears in all copies.
// This software is provided "as is" without express or implied
// warranty, and with no claim as to its suitability for any purpose.
which, I belive, is preferred, or any one you like, which meets Boost
guidelines.
2. Once you decide on 1) I'll commit your patch, making nonrecursive dfs
default. I plan to retain the old version for a while, because it would be
desirable to compare performance.
3. Maybe, the FAQ, either fully or partically, must be added too. That's up to
you, though.
Thanks,
Volodya