mirror of https://github.com/zlatinb/muwire
genericize file tree
parent
ecfd4180c0
commit
23b2c912e2
|
@ -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() {
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in New Issue