list_reverse.hpp

Back to Doubly-linked list

pastel/sys/list/

#ifndef PASTELSYS_LIST_REVERSE_HPP
#define PASTELSYS_LIST_REVERSE_HPP

#include "pastel/sys/list/list_reverse.h"

namespace Pastel
{

    template <
        typename Settings,
        template <typename> class Customization>
    List<Settings, Customization>& 
        reverse(List<Settings, Customization>& list)
    {
        if (list.empty())
        {
            // Nothing to do.
            return list;
        }

        using Fwd = List<Settings, Customization>;
        PASTEL_FWD(ConstIterator);

        ConstIterator tail = list.begin();
        ConstIterator iter = list.last();
        while (iter != tail)
        {
            ConstIterator prev = std::prev(iter);
            list.splice(tail, list, iter);
            iter = prev;
        }

        return list;
    }

}

#endif