[Issue 12188] std.algorithm.nextPermutation requires random access

d-bugmail at puremagic.com d-bugmail at puremagic.com
Tue Feb 18 12:51:28 PST 2014


https://d.puremagic.com/issues/show_bug.cgi?id=12188



--- Comment #1 from Peter Alexander <peter.alexander.au at gmail.com> 2014-02-18 12:51:15 PST ---
BTW, you may already know this, but it's impossible to solve this with the
current range primitives. See the discussion here:

http://www.digitalmars.com/d/archives/digitalmars/D/Retrieving_the_traversed_range_116085.html#N116085

To summarise the discussion: it is impossible currently, and Andrei recommends
two approaches:

1. Just make it random access only for now.

2. Define a new primitive: allBefore, like this:

R allBefore(R)(R all, R tail) if (isRandomAccessRange!R && hasLength!R)
{
     // assume tail starts somewhere inside all and ends where all ends
     enforce(all.length >= tail.length);
     return all[0 .. all.length - tail.length);
}

R allBefore(R)(R all, R tail)
         if (isBidirectionalRange!R &&
             is(typeof(all.allBeforeImpl(tail)) : R))
{
     return all.allBeforeImpl(tail);
}

And require that for nextPermutation

-- 
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------


More information about the Digitalmars-d-bugs mailing list