Merge pull request #495 from blackwhale/issue-7138

dirEntries issues 7264 & 7138
This commit is contained in:
Andrei Alexandrescu 2012-03-17 10:19:45 -07:00
commit 58f1b2bc51

View file

@ -2102,20 +2102,21 @@ else version(Windows)
struct DirEntry
{
public:
alias name this;
@property string name() const
@property string name() const pure nothrow
{
return _name;
}
@property bool isDir() const
@property bool isDir() const pure nothrow
{
return (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
}
deprecated alias isDir isdir;
@property bool isFile() const
@property bool isFile() const pure nothrow
{
//Are there no options in Windows other than directory and file?
//If there are, then this probably isn't the best way to determine
@ -2125,12 +2126,12 @@ else version(Windows)
deprecated alias isFile isfile;
@property bool isSymlink() const
@property bool isSymlink() const pure nothrow
{
return (attributes & FILE_ATTRIBUTE_REPARSE_POINT) != 0;
}
@property ulong size() const
@property ulong size() const pure nothrow
{
return _size;
}
@ -2140,7 +2141,7 @@ else version(Windows)
return sysTimeToDTime(_timeCreated);
}
@property SysTime timeCreated() const
@property SysTime timeCreated() const pure nothrow
{
return cast(SysTime)_timeCreated;
}
@ -2150,7 +2151,7 @@ else version(Windows)
return sysTimeToDTime(_timeLastAccessed);
}
@property SysTime timeLastAccessed() const
@property SysTime timeLastAccessed() const pure nothrow
{
return cast(SysTime)_timeLastAccessed;
}
@ -2160,17 +2161,17 @@ else version(Windows)
return sysTimeToDTime(_timeLastModified);
}
@property SysTime timeLastModified() const
@property SysTime timeLastModified() const pure nothrow
{
return cast(SysTime)_timeLastModified;
}
@property uint attributes() const
@property uint attributes() const pure nothrow
{
return _attributes;
}
@property uint linkAttributes() const
@property uint linkAttributes() const pure nothrow
{
return _attributes;
}
@ -2246,8 +2247,9 @@ else version(Posix)
struct DirEntry
{
public:
alias name this;
@property string name() const
@property string name() const pure nothrow
{
return _name;
}
@ -3082,23 +3084,7 @@ public:
@property bool empty(){ return impl.empty; }
@property DirEntry front(){ return impl.front; }
void popFront(){ impl.popFront(); }
int opApply(int delegate(ref string name) dg)
{
foreach(DirEntry v; impl.refCountedPayload)
{
string s = v.name;
if(dg(s))
return 1;
}
return 0;
}
int opApply(int delegate(ref DirEntry name) dg)
{
foreach(DirEntry v; impl.refCountedPayload)
if(dg(v))
return 1;
return 0;
}
}
/++
Returns an input range of DirEntry that lazily iterates a given directory,
@ -3189,6 +3175,21 @@ unittest
}
}
unittest
{
//issue 7264
foreach (string name; dirEntries(".", "*.d", SpanMode.breadth))
{
}
foreach (entry; dirEntries(".", SpanMode.breadth))
{
static assert(is(typeof(entry) == DirEntry));
}
//issue 7138
auto a = array(dirEntries(".", SpanMode.shallow));
}
/++
Convenience wrapper for filtering file names with a glob pattern.