-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmemoize.d
46 lines (34 loc) · 1.16 KB
/
memoize.d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
module test;
@safe:
import std;
// Memoizes a function so as to avoid repeated computation
// https://dlang.org/library/std/functional/memoize.html
void main()
{
string srcDir = "D:\\My Documents\\D";
//auto dFiles = memoize!(() => srcDir.dirEntries("*.{d, di}", SpanMode.depth).map!(e => e.name).array);
// can't use above in module @safe: due to memoize being a @system function. Will use trusted wrapper below instead.
string[] dFiles;
() @trusted { dFiles = memoize!(() => srcDir.dirEntries("*.{d, di}", SpanMode.depth).map!(e => e.name).array); } ();
dFiles.sort;
size_t counter;
foreach(f; dFiles)
{
counter++;
writeln(f);
}
writeln;
writefln("Found %s files.", counter);
}
/+
example output:
D:\My Documents\D\codesamples\concurrency.1.d
D:\My Documents\D\codesamples\concurrency.10.d
D:\My Documents\D\codesamples\concurrency.11.d
D:\My Documents\D\codesamples\concurrency.12.d
D:\My Documents\D\codesamples\concurrency.13.d
D:\My Documents\D\codesamples\concurrency.14.d
D:\My Documents\D\codesamples\concurrency.15.d
D:\My Documents\D\codesamples\concurrency.16.d
Found 8 files.
+/