On 2009-01-19 18:11:15 -0500, Sergey Gromov <snake.sc...@gmail.com> said:

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 think it's the same as this:


class progressUpdater(Collection)
{
 this(Collection c)
 {
   collection_ = c;
 }

 int opApply(int delegate(ref ElementType!(Collection)) dg)
 {
   int fancifier(ref ElementType!(Collection) el)
   {
     globalOnProgress();
     return composed_(el);
   }

   composed_ = dg;
   return collection_.opApply(&fancifier);
 }

 private:

 Collection collection_;
}


Or this:


class progressUpdater(Collection)
{
 this(Collection c)
 {
   collection_ = c;
 }

 int opApply(int delegate(ref ElementType!(Collection)) dg)
 {
        foreach(ref ElementType!(Collection) el; collection_)
   {
     globalOnProgress();
     if (dg(el))
       return 1;
   }
   return 0;
 }

 private:

 Collection collection_;
}


--
Michel Fortin
michel.for...@michelf.com
http://michelf.com/

Reply via email to