[Issue 9871] std.typecons.asRange
    d-bugmail at puremagic.com 
    d-bugmail at puremagic.com
       
    Wed Apr  3 21:15:05 PDT 2013
    
    
  
http://d.puremagic.com/issues/show_bug.cgi?id=9871
bearophile_hugs at eml.cc changed:
           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|std.typecons.AsRange/asRang |std.typecons.asRange
                   |e                           |
--- Comment #1 from bearophile_hugs at eml.cc 2013-04-03 21:15:04 PDT ---
A simpler implementation:
import std.typecons, std.typetuple, std.stdio, std.algorithm,
       std.range;
bool validAsRange(T)() {
    if (!isTuple!T || NoDuplicates!(T.Types).length != 1)
        return false;
    foreach (i, _; T.Types) // Useless?
        if (T.tupleof[i].offsetof != T.Types[0].sizeof * i)
            return false;
    return true;
}
T.Types[0][] asRange(T)(ref T tup) if (validAsRange!T()) {
    return (cast(T.Types[0]*)&tup[0])[0 .. T.length];
}
void main() { // demo
    auto a = [0];
    auto b = [5];
    auto c = [11];
    auto d = [22];
    Tuple!(int,int,int,int) tup = zip(a, b, c, d).front;
    auto result = tup.asRange.map!(x => x * 2).array;
    assert(result == [0, 10, 22, 44]);
}
-- 
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
    
    
More information about the Digitalmars-d-bugs
mailing list