0
我正在嘗試實現buildPath
的高性能(最小堆活動)和@safe
和pure
的變體。高性能安全路徑和純路徑構建
我到目前爲止嘗試是
/** Returns: Path to $(D this) File. */
string path() @property @safe const pure {
const Dir[] parents;
// collect parenting Dirs
auto currParent = parent;
size_t pathLength = 0; // returned path length
while (currParent !is null) {
if (currParent !is parent) {
pathLength += 1;
}
pathLength += currParent.name.length;
parents ~= currParent;
currParent = parent.parent;
}
// build path
auto path_ = new char[pathLength];
size_t i = 0;
foreach (currParent_; parents) {
const parentName = currParent_.name;
if (i != 0) {
path_[++i] = '/';
}
path_[i .. parentName.length] = parentName[];
i += parentName.length;
}
return path;
}
不過,這並不因爲對parents
和currParent
與常量性問題的編譯。
/home/per/Work/justd/fs.d(408): Error: cannot modify const expression parents
/home/per/Work/justd/fs.d(409): Error: cannot modify const expression currParent
如果我讓path()
@trusted
和非const代替@safe const
和parents
非const的代碼編譯這是可以接受的,但絕對不是漂亮。
是否有可能申報const class Dir
-references(parents
)和 一個可變基準的可變數組const對象(pathSlow
)?如果這樣可以以優雅的方式解決這個問題。
請注意,path()
是文件系統樹結構的成員函數,其中每個節點包含對類Dir
的實例的引用。
好的。我也這麼想。 –