D's rotateTail [was: C++'s std::rotate]

Fool via Digitalmars-d digitalmars-d at puremagic.com
Sun Aug 24 03:05:39 PDT 2014


There was a bug in my C++ translation of rotateTail. The only 
significant change in execution time is marked below:

On Sunday, 24 August 2014 at 09:20:59 UTC, Fool wrote:
>  compiler | algorithm                | execution time
> ----------+--------------------------+----------------
>  clang++  | std::rotate              | 1.62s
>  clang++  | my_rotate / std::reverse | 1.44s
>  clang++  | my_rotate / my_reverse   | 0.38s <-
>  ldc2     | rotateTail               | 1.64s
>  g++      | std::rotate              | 0.57s
>  g++      | my_rotate / std::reverse | 1.43s
>  g++      | my_rotate / my_reverse   | 0.37s
>  gdc      | rotateTail               | 0.38s

The fixed implementation of my_rotate:

> template <typename TIterator>
> TIterator my_rotate
> (
>    TIterator b,
>    TIterator m,
>    TIterator e
> )
> {
>    if (m == e) return b;
>    if (b == m) return e;
>
> //   my_reverse(m, e); // <-
>    std::reverse(m, e); // <-
>
>    auto s = std::next(b, std::distance(m, e));
>
> //   my_reverse(b, e);
>    std::reverse(b, e);
> //   my_reverse(s, e);
>    std::reverse(s, e);
>
>    return s;
> }



More information about the Digitalmars-d mailing list