On Tue, 09 Apr 2013 18:09:07 -0400, Joseph Rushton Wakeling <joseph.wakel...@webdrake.net> wrote:

On 04/09/2013 11:02 PM, Steven Schveighoffer wrote:

3. For your specific situation, add lastFront():

It's an interesting thought. I don't think it's ultimately the right way to go -- yes, my application rests strongly on finding the last value, but the problem is very simply that popFront kills the value _before_ finding out if the range
is now empty.

Well here is another solution:

struct MySimulation(T)
{
        T[] var;
        T[] tmpvar;
        T diff, convergence;

        auto front() @property
        {
                return var;
        }

        bool empty() @property
        {
                return (diff < convergence);
        }

        void popFront()
        {
                tmpvar[] = var[];
                // update values in var
                // and calculate diff
                if(empty)
                {
                        var[] = tmpvar[]; // revert
                        var = null; // optional, detach from original array
                }
        }
}

You could also use alloca to avoid storing tmpvar as a struct member and also avoid allocation.

-Steve

Reply via email to