Any chance to call Tango as Extended Standard Library

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Thu Jan 22 09:27:53 PST 2009


Sergey Gromov wrote:
> Mon, 19 Jan 2009 06:15:06 -0800, Andrei Alexandrescu wrote:
> 
>> Michel Fortin wrote:
>>> Other possible things involves a rudimentary profiler (checking for the 
>>> elapsed time at each loop iteration), or a progress monitoring template 
>>> (notifying another thread of the progress of a particular task).
>>>
>>>     foreach (task; progessUpdater(timeProfiler(listOfTasks)))
>>>     { ... }
>> You can't compose iteration based on opApply. How would progessUpdater 
>> and timeProfiler look like? This example pretty much transforms your 
>> argument into mine :o).
> 
> I think "can't" is a bit strong a statement.  Let's see:
> 
> With opApply:
> 
> class progressUpdater(Collection)
> {
>   this(Collection c)
>   {
>     collection_ = c;
>   }
>   
>   int opApply(int delegate(ref ElementType!(Collection)) dg)
>   {
>     composed_ = dg;
>     return collection_.opApply(&fancifier);
>   }
>   
>   private:
>   
>   int fancifier(ref ElementType!(Collection) el)
>   {
>     globalOnProgress();
>     return composed_(el);
>   }
>   
>   Collection collection_;
>   int delegate(ref ElementType!(Collection)) composed_;
> }

I see. Very ingenious! Reversed flow of control all the way. Thanks.

Andrei



More information about the Digitalmars-d mailing list