Skip to content

Commit cfca826

Browse files
committed
Make UsernameTrie thread-safe.
1 parent 3eec46c commit cfca826

File tree

2 files changed

+6
-5
lines changed

2 files changed

+6
-5
lines changed

Utils/src/main/java/com/janboerman/invsee/utils/ArrayHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.janboerman.invsee.utils;
22

3-
public class ArrayHelper {
3+
public final class ArrayHelper {
44

55
private ArrayHelper() {
66
}

Utils/src/main/java/com/janboerman/invsee/utils/UsernameTrie.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
public class UsernameTrie<V> {
2222

2323
//TODO we might want to be case in-sensitive, but goes at the cost of tab-completing names in their right casing.
24+
//TODO can we make this a lock-free thread-safe data structure?
2425

2526
private final Node<V> root;
2627

@@ -40,7 +41,7 @@ public Maybe<V> insert(String username, V value) {
4041
return insert(username.toCharArray(), value);
4142
}
4243

43-
public Maybe<V> insert(char[] username, V value) {
44+
public synchronized Maybe<V> insert(char[] username, V value) {
4445
Node<V> node = root.lookup(username);
4546
Maybe<V> oldValue = node.value;
4647
node.value = Maybe.just(value);
@@ -51,7 +52,7 @@ public Maybe<V> delete(String username) {
5152
return delete(username.toCharArray());
5253
}
5354

54-
public Maybe<V> delete(char[] username) {
55+
public synchronized Maybe<V> delete(char[] username) {
5556
Node<V> node = root.lookup(username);
5657
Maybe<V> oldValue = node.value;
5758
node.value = Maybe.nothing();
@@ -63,7 +64,7 @@ public Maybe<V> get(String username) {
6364
return get(username.toCharArray());
6465
}
6566

66-
public Maybe<V> get(char[] username) {
67+
public synchronized Maybe<V> get(char[] username) {
6768
Node<V> node = root.lookup(username);
6869
Maybe<V> value = node.value;
6970
node.cleanUp();
@@ -74,7 +75,7 @@ public void traverse(String prefix, BiConsumer<String, ? super V> consumer) {
7475
traverse(prefix.toCharArray(), (chars, v) -> consumer.accept(new String(chars), v));
7576
}
7677

77-
public void traverse(char[] prefix, BiConsumer<char[], ? super V> consumer) {
78+
public synchronized void traverse(char[] prefix, BiConsumer<char[], ? super V> consumer) {
7879
Node<V> node = root.lookup(prefix);
7980
node.traverse(consumer);
8081
node.cleanUp();

0 commit comments

Comments
 (0)