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

View File

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