digitalmars.D.bugs - [Issue 5638] New: Auto-flattening std.range.chain()
- d-bugmail puremagic.com (45/45) Feb 21 2011 http://d.puremagic.com/issues/show_bug.cgi?id=5638
http://d.puremagic.com/issues/show_bug.cgi?id=5638 Summary: Auto-flattening std.range.chain() Product: D Version: D2 Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc A D2 demo program: import std.range, std.stdio; void main() { auto c1 = chain([1, 2], [3, 4]); writeln(c1); writeln(typeid(typeof(c1))); auto c2 = chain(c1, [5, 6]); writeln(c2); writeln(typeid(typeof(c2))); auto c3 = chain([1, 2], [3, 4], [5, 6]); writeln(c3); writeln(typeid(typeof(c3))); } It prints, with DMD 2.052: [1, 2, 3, 4] std.range.ChainImpl!(int[],int[]).ChainImpl [1, 2, 3, 4, 5, 6] std.range.ChainImpl!(ChainImpl!(int[],int[]),int[]).ChainImpl [1, 2, 3, 4, 5, 6] std.range.ChainImpl!(int[],int[],int[]).ChainImpl I suggest to add some simple automatic simplifications to chain(), so c2 has the same type of c3: chain(chain(something), r2) ==> chain(something, r2) chain(r1, chain(something)) ==> chain(r1, something) chain(chain(something1), chain(something2)) ==> chain(something1, something2) To perform them chain() just needs to recognize the type of itself among its iterable arguments and return a chain of the arguments of the sub-chains. This flattening is useful to speed up the code with complex nested/paired chainings, like ones coming from recursive algorithms. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Feb 21 2011