Example #1
0
void PGE_Menu::sort()
{
    if(_items.size()<=1) {
        autoOffset();    //Nothing to sort!
        return;
    }

    QStack<int> beg;
    QStack<int> end;
    PGE_Menuitem * piv;
    int i=0, L, R, swapv;
    beg.push_back(0);
    end.push_back(_items.size());
    while (i>=0)
    {
        L=beg[i];
        R=end[i]-1;
        if (L<R)
        {
            piv=_items[L];
            while (L<R)
            {
                while ((namefileMoreThan(_items[R], piv)) && (L<R)) R--;
                if (L<R) _items[L++]=_items[R];

                while ((namefileLessThan(_items[L], piv)) && (L<R)) L++;
                if (L<R) _items[R--]=_items[L];
            }
            _items[L]=piv;
            beg.push_back(L+1);
            end.push_back(end[i]);
            end[i++]=(L);
            if((end[i]-beg[i]) > (end[i-1]-beg[i-1]))
            {
                swapv=beg[i];
                beg[i]=beg[i-1];
                beg[i-1]=swapv;
                swapv=end[i];
                end[i]=end[i-1];
                end[i-1]=swapv;
            }
        }
        else
        {
            i--;
            beg.pop_back();
            end.pop_back();
        }
    }

    autoOffset();
}
Example #2
0
void PGE_LevelCamera::sortElements()
{
    if(objects_to_render.size()<=1) return; //Nothing to sort!
    QStack<int> beg;
    QStack<int> end;
    PGE_Phys_Object* piv;
    int i=0, L, R, swapv;
    beg.push_back(0);
    end.push_back(objects_to_render.size());
    while (i>=0)
    {
        L=beg[i]; R=end[i]-1;
        if (L<R)
        {
            piv=objects_to_render[L];
            while (L<R)
            {
                while ((objects_to_render[R]->zIndex()>=piv->zIndex()) && (L<R)) R--;
                if (L<R) objects_to_render[L++]=objects_to_render[R];

                while ((objects_to_render[L]->zIndex()<=piv->zIndex()) && (L<R)) L++;
                if (L<R) objects_to_render[R--]=objects_to_render[L];
            }
            objects_to_render[L]=piv; beg.push_back(L+1); end.push_back(end[i]); end[i++]=(L);
            if((end[i]-beg[i]) > (end[i-1]-beg[i-1]))
            {
                swapv=beg[i]; beg[i]=beg[i-1]; beg[i-1]=swapv;
                swapv=end[i]; end[i]=end[i-1]; end[i-1]=swapv;
            }
        }
        else
        {
            i--;
            beg.pop_back();
            end.pop_back();
        }
    }
}