[Issue 12062] New: std.range.flatten
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Sun Feb 2 08:53:13 PST 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12062
Summary: std.range.flatten
Product: D
Version: D2
Platform: All
OS/Version: All
Status: NEW
Severity: enhancement
Priority: P2
Component: Phobos
AssignedTo: nobody at puremagic.com
ReportedBy: bearophile_hugs at eml.cc
--- Comment #0 from bearophile_hugs at eml.cc 2014-02-02 08:53:12 PST ---
I suggest to add to std.range a range designed to flatten a given n-dimensional
range.
A simple usage example:
int[][] mat = [[1, 2], [3, 4]];
auto mu = mat.flatten.uniq;
std.range.flatten should take a range, range of ranges, range of range of
ranges, etc, and yield the scanned items.
A possible signature:
Flatten flatten(ScanType scan = ScanType.rows(), Range, Targs...)(Range input,
int maxDepth=-1, Targs args);
Where maxDepth tells it a what depth to stop, defaulting to -1 that means to
reach the bottom.
ScanType can be:
enum ScanType {
rows,
columns,
bidirectionalRows,
bidirectionalColumns,
}
Later more scans can be added:
enum ScanType {
rows,
columns,
bidirectionalRows,
bidirectionalColumns,
zigZag,
hammingCurve,
zCurve,
rectBlocked
}
args is used by ScanArgs.rectBlocked, to specify the nx and ny of a 2D block.
The blocked scan is useful because it's a cache-friendly scan for large 2D
arrays.
Ideally flatten should yield references of the items, so you can increase all
matrix items by 1 with code like:
int[][][] mat = [[[1, 2], [3, 4]], [[5, 6], [7, 8]]];
foreach (ref x; mat.flatten)
x++;
--
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