94 lines
1.4 KiB
Plaintext
94 lines
1.4 KiB
Plaintext
import std.io;
|
|
|
|
interface Document
|
|
{
|
|
getDepth() -> Int; // return type is necessary
|
|
getName() -> String;
|
|
|
|
/* toString() -> String
|
|
{
|
|
// default implementation
|
|
}
|
|
*/
|
|
}
|
|
|
|
struct File
|
|
{
|
|
public depth: Int;
|
|
public name: String;
|
|
}
|
|
|
|
impl Document for File
|
|
{
|
|
getDepth()
|
|
{
|
|
return depth;
|
|
}
|
|
getName()
|
|
{
|
|
return name;
|
|
}
|
|
}
|
|
|
|
struct Folder
|
|
{
|
|
public depth: Int;
|
|
public name: String;
|
|
public childs: List = [];
|
|
}
|
|
|
|
impl Document for Folder
|
|
{
|
|
getDepth()
|
|
{
|
|
return depth;
|
|
}
|
|
|
|
getName()
|
|
{
|
|
return name;
|
|
}
|
|
}
|
|
|
|
const root_folder := new Folder{
|
|
0,
|
|
"root",
|
|
[
|
|
new File{
|
|
1,
|
|
"joyo.txt"
|
|
},
|
|
new Folder{
|
|
2,
|
|
"joyoyo",
|
|
[
|
|
new File{
|
|
3,
|
|
"JOYO2.txt"
|
|
},
|
|
new Folder{
|
|
3,
|
|
"joyoyoyo"
|
|
|
|
},
|
|
]
|
|
}
|
|
]
|
|
};
|
|
|
|
func print_directory(root: Document)
|
|
{
|
|
io.print(" " * root.getDepth());
|
|
io.println(root.getDepth(), root.getName());
|
|
if root is Folder
|
|
{
|
|
for var i := 0; i < root.childs.length(); i += 1
|
|
{
|
|
var child := root.childs[i];
|
|
print_directory(child);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
print_directory(root_folder); |