blob: bb0576a5388c14a9b90f41ac4ad386940f597cfd [file] [log] [blame]
part of file.src.backends.in_memory;
class _InMemoryDirectory
extends _InMemoryFileSystemEntity
with Directory {
_InMemoryDirectory(InMemoryFileSystem fileSystem, String path)
: super(fileSystem, path);
// Create an object representing a directory with no files.
@override
Object _createImpl() => {};
@override
Stream<FileSystemEntity> list({bool recursive: false}) async* {
var directory = _resolve(false);
if (directory == null) {
throw new FileSystemEntityException('Not found', path);
}
if (name != '') {
directory = directory[name];
}
// This could be optimized heavily, right now it makes a lot of extra
// lookups and gets more and more expensive as you traverse downwards.
for (var name in directory.keys) {
var entityPath = '$path/$name';
if (await fileSystem.type(entityPath) == FileSystemEntityType.FILE) {
yield fileSystem.file(entityPath);
} else if (recursive) {
yield* fileSystem.directory(entityPath).list(recursive: true);
} else {
yield fileSystem.directory(entityPath);
}
}
}
@override
final FileSystemEntityType _type = FileSystemEntityType.DIRECTORY;
}