> > 8. Visitation algorithm
> > In sketch presented visitation algorithm look like this:
> >
> > void foo1( which, visitor )
> > {
> >     if( n = 1 )
> >        visitor(...)
> >    else
> >       foo2( which, visitor );
> > }
> >
> > void foo2( which, visitor )
> > {
> >     if( n = 2 )
> >        visitor(...)
> >    else
> >       foo3( which, visitor );
> > }
> >
> > ....
> >
> > In a pseudo code it could be rewritten like this
> >
> > foo( visitor )
> > {
> >    if( which == 1 ) visitor( first field );
> >    else if( which == 2 ) visitor( second field );
> >
> > ...
> >    else if( which == n ) visitor( nth field );
> > }
> >
> > It's obvious that switch-based algorithm will be more effective. And
> > I believe that given at compile time number of the types supplied
> > (or maximum possible types variant accepts we should be able to
> > generate one (even if we will need to use PP for that )
>
> I'm not sure it's obvious, or even true. These functions are inlined,
> and as of yet I have no reason to doubt my code will "unroll" to match
> yours. Admittedly though, I have not inspected any disassembled
> compiler outputs. Let me know any results you may uncover.

Let's see. Even unrolled if/else based version has complexity
O(Number_of_types). While switch based version should have a complexity
O(1). IMO it's obvious that later is much more prefererable to former. Don't
you agree?

Gennadiy.



_______________________________________________
Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost

Reply via email to