On Sunday, 10 September 2017 at 15:46:46 UTC, Ali Çehreli wrote:
On 09/10/2017 04:54 AM, Vino.B wrote:

> Thank you very much, as stated by you i used the auto
function and now
> i am get the output without any warnings

That's because now you're taking advantage of D's type inference. Although it doesn't cover the entire story, you may want to read about D's Voldemort types. (Your case did not involve Voldemort types though; in your case it was just a private symbol.)

So, you can give a name to that return value yourself:

alias DirSizeList = typeof(coSizeDirList());

> Sub Function:

Unrelated: They are all called "functions" in D.

>  //Array!string MStext;
>  string[][] MStext;     // Getting Error on this line, while
trying to
> change it to auto;
>  auto MSresult = taskPool.workerLocalStorage(MStext);

Now you can use DirSizeList there:

    auto MSresult = taskPool.workerLocalStorage!DirSizeList();

Ali

Hi Ali,

 I tried to add/replace the above line's but still not working.

Error: function T2.coSizeDirList (string FFs, int SizeDir) is not callable using argument types ()

import core.stdc.stdlib: exit;
import std.algorithm: all, among, filter, map, setDifference, sort, uniq, each, joiner;
import std.array: appender, join;
import std.container.array;
import std.conv: to;
import std.datetime.systime: Clock, days, SysTime;
import std.file: SpanMode, dirEntries, exists, isFile, mkdir, remove, rmdirRecurse;
import std.getopt;
import std.parallelism: parallel, task, taskPool;
import std.path: absolutePath, baseName, dirName, isValidFilename, isValidPath, globMatch;
import std.range: empty;
import std.stdio: File, writefln, writeln;
import std.string: chomp, chop, isNumeric, split, strip;
import std.typecons: tuple, Tuple;
import std.uni: isAlpha, toLower, isWhite;

auto coSizeDirList (string FFs, int SizeDir) {
        ulong subdirTotal;
        ulong subdirTotalGB;
        Array!string Subdir;
        Array!ulong Subsize;
auto dFiles = Array!string ((dirEntries(FFs, SpanMode.shallow).filter!(a => a.isDir))[].map!(a => a.name));
    foreach (d; dFiles[]) {
auto SdFiles = Array!ulong(dirEntries(d, SpanMode.depth).map!(a => a.size));
                                foreach(f; SdFiles[]) { subdirTotal += f; }
subdirTotalGB = (subdirTotal/1024/1024); { Subdir ~= d; Subsize ~= subdirTotalGB; }
                                if (subdirTotalGB > SizeDir)
                                subdirTotal = 0;
                    }
                        return tuple (Subdir[], Subsize[]);
//                      alias DirSizeList = typeof(coSizeDirList());
}
//alias DirSizeList = typeof(coSizeDirList());
void ptSizeDirList (string[] SizeDirlst, int SizeDir) {
 try {
//alias DirSizeList = typeof(coSizeDirList());
 auto MSresult = taskPool.workerLocalStorage!DirSizeList();
writeln("Function \t : List the Folder whose Size greater then ", SizeDir, " GB");
 writeln("Dir. Scanned \t :", SizeDirlst);
writeln("************************************************************************************");
 writefln("%-63s %.20s", "File Name", "Size (GB)");
writeln("************************************************************************************");
 foreach (string Fs; parallel(SizeDirlst[0 .. $], 1)) {
                        auto FFs = Fs.strip;
                        auto MSizeDirList = task(&coSizeDirList, FFs, SizeDir);
                        MSizeDirList.executeInNewThread();
                        auto MSizeDirListData = MSizeDirList.workForce;
                        MSresult.get ~= MSizeDirListData;
                }
                foreach(i; MSresult.toRange)
                if (!i.empty) {
writefln("%(%-(%-63s %)\n%)", i[].sort!((a,b) => a[0] < b[0]).uniq); }
                        
writeln("************************************************************************************");
} catch (Exception e) { writeln(e.msg); }
}

void main () {
string SizeDirlst = "C:\\Temp\\sapnas2\\BACKUP";
int SizeDir = 10;
coSizeDirList(SizeDirlst, SizeDir);
}

Reply via email to