genericize file tree

pull/34/head
Zlatin Balevsky 2019-12-06 10:08:27 +00:00
parent ecfd4180c0
commit 23b2c912e2
2 changed files with 10 additions and 8 deletions

View File

@ -2,12 +2,12 @@ package com.muwire.core.files
import java.util.concurrent.ConcurrentHashMap
class FileTree {
class FileTree<T> {
private final TreeNode root = new TreeNode()
private final Map<File, TreeNode> fileToNode = new ConcurrentHashMap<>()
synchronized void add(File file) {
synchronized void add(File file, T value) {
List<File> path = new ArrayList<>()
path.add(file)
while (file.getParentFile() != null) {
@ -29,6 +29,7 @@ class FileTree {
}
current = existing
}
current.value = value;
}
synchronized boolean remove(File file) {
@ -45,9 +46,10 @@ class FileTree {
true
}
public static class TreeNode {
public static class TreeNode<T> {
TreeNode parent
File file
T value;
final Set<TreeNode> children = new HashSet<>()
public int hashCode() {

View File

@ -10,8 +10,8 @@ class FileTreeTest {
File b = new File(a, "b")
File c = new File(b, "c")
FileTree tree = new FileTree()
tree.add(c)
FileTree<Void> tree = new FileTree<>()
tree.add(c,null)
assert tree.root.children.size() == 1
assert tree.fileToNode.size() == 3
@ -28,12 +28,12 @@ class FileTreeTest {
File c = new File(b, "c")
File d = new File(b, "d")
FileTree tree = new FileTree()
tree.add(c)
FileTree<Void> tree = new FileTree<>()
tree.add(c,null)
assert tree.fileToNode.size() == 3
tree.add(d)
tree.add(d, null)
assert tree.fileToNode.size() == 4
tree.remove(d)