Skip to content

Commit d73354f

Browse files
committed
add clear() method for dictionary
1 parent b1f5b83 commit d73354f

10 files changed

+94
-2
lines changed

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/MutableIntToRefDictionary.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,7 @@ static <V> MutableIntToRefDictionary<V> ofTypes(Class<V> valueType) {
4545
*/
4646
Optional<V> removeOptional(int key);
4747

48+
void clear();
49+
4850
IntToRefDictionary<V> toReadOnly();
4951
}

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/MutableLongToRefDictionary.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,7 @@ static <V> MutableLongToRefDictionary<V> ofTypes(Class<V> valueType) {
4545
*/
4646
Optional<V> removeOptional(long key);
4747

48+
void clear();
49+
4850
LongToRefDictionary<V> toReadOnly();
4951
}

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/MutableRefToRefDictionary.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,5 +46,7 @@ static <K, V> MutableRefToRefDictionary<K, V> ofTypes(
4646
*/
4747
Optional<V> removeOptional(K key);
4848

49+
void clear();
50+
4951
RefToRefDictionary<K, V> toReadOnly();
5052
}

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/impl/AbstractLockableHashBasedRefToRefDictionary.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,12 @@ protected int decrementSize() {
5353
return size.decrementAndGet();
5454
}
5555

56+
@Override
57+
public void clear() {
58+
Arrays.fill(entries(), null);
59+
size.set(0);
60+
}
61+
5662
@Override
5763
protected void threshold(int threshold) {
5864
this.threshold = threshold;

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/impl/DefaultMutableHashBasedIntToRefDictionary.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ protected int decrementSize() {
4444
return size--;
4545
}
4646

47+
@Override
48+
public void clear() {
49+
Arrays.fill(entries, null);
50+
size = 0;
51+
}
52+
4753
@Override
4854
protected void threshold(int threshold) {
4955
this.threshold = threshold;

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/impl/DefaultMutableHashBasedLongToRefDictionary.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ protected int decrementSize() {
4444
return size--;
4545
}
4646

47+
@Override
48+
public void clear() {
49+
Arrays.fill(entries, null);
50+
size = 0;
51+
}
52+
4753
@Override
4854
protected void threshold(int threshold) {
4955
this.threshold = threshold;

rlib-collections/src/main/java/javasabr/rlib/collections/dictionary/impl/DefaultMutableHashBasedRefToRefDictionary.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ protected int decrementSize() {
4444
return size--;
4545
}
4646

47+
@Override
48+
public void clear() {
49+
Arrays.fill(entries, null);
50+
size = 0;
51+
}
52+
4753
@Override
4854
protected void threshold(int threshold) {
4955
this.threshold = threshold;

rlib-collections/src/test/java/javasabr/rlib/collections/dictionary/MutableIntToRefDictionaryTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,28 @@ void shouldAppendDictionary(MutableIntToRefDictionary<String> dictionary) {
136136
assertThat(dictionary.size()).isEqualTo(5);
137137
}
138138

139+
@ParameterizedTest
140+
@MethodSource("generateDictionaries")
141+
void shouldBeEmptyAfterClear(MutableIntToRefDictionary<String> dictionary) {
142+
// when:
143+
dictionary.put(1, "val1");
144+
dictionary.put(4, "val4");
145+
146+
// then:
147+
assertThat(dictionary.isEmpty()).isFalse();
148+
149+
// when:
150+
dictionary.clear();
151+
152+
// then:
153+
assertThat(dictionary.isEmpty()).isTrue();
154+
assertThat(dictionary.get(1)).isNull();
155+
assertThat(dictionary.containsKey(1)).isFalse();
156+
}
157+
139158
private static Stream<Arguments> generateDictionaries() {
140-
return Stream.of(Arguments.of(DictionaryFactory.mutableIntToRefDictionary()));
159+
return Stream.of(
160+
Arguments.of(MutableIntToRefDictionary.ofTypes(String.class)),
161+
Arguments.of(DictionaryFactory.mutableIntToRefDictionary()));
141162
}
142163
}

rlib-collections/src/test/java/javasabr/rlib/collections/dictionary/MutableLongToRefDictionaryTest.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,28 @@ void shouldAppendDictionary(MutableLongToRefDictionary<String> dictionary) {
136136
assertThat(dictionary.size()).isEqualTo(5);
137137
}
138138

139+
@ParameterizedTest
140+
@MethodSource("generateDictionaries")
141+
void shouldBeEmptyAfterClear(MutableLongToRefDictionary<String> dictionary) {
142+
// when:
143+
dictionary.put(1, "val1");
144+
dictionary.put(4, "val4");
145+
146+
// then:
147+
assertThat(dictionary.isEmpty()).isFalse();
148+
149+
// when:
150+
dictionary.clear();
151+
152+
// then:
153+
assertThat(dictionary.isEmpty()).isTrue();
154+
assertThat(dictionary.get(1)).isNull();
155+
assertThat(dictionary.containsKey(1)).isFalse();
156+
}
157+
139158
private static Stream<Arguments> generateDictionaries() {
140-
return Stream.of(Arguments.of(DictionaryFactory.mutableLongToRefDictionary()));
159+
return Stream.of(
160+
Arguments.of(MutableLongToRefDictionary.ofTypes(String.class)),
161+
Arguments.of(DictionaryFactory.mutableLongToRefDictionary()));
141162
}
142163
}

rlib-collections/src/test/java/javasabr/rlib/collections/dictionary/MutableRefToRefDictionaryTest.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,25 @@ void shouldCorrectlyComputeOnGet(MutableRefToRefDictionary<String, String> dicti
112112
assertThat(dictionary.size()).isEqualTo(3);
113113
}
114114

115+
@ParameterizedTest
116+
@MethodSource("generateDictionaries")
117+
void shouldBeEmptyAfterClear(MutableRefToRefDictionary<String, String> dictionary) {
118+
// when:
119+
dictionary.put("key1", "val1");
120+
dictionary.put("key4", "val4");
121+
122+
// then:
123+
assertThat(dictionary.isEmpty()).isFalse();
124+
125+
// when:
126+
dictionary.clear();
127+
128+
// then:
129+
assertThat(dictionary.isEmpty()).isTrue();
130+
assertThat(dictionary.get("key1")).isNull();
131+
assertThat(dictionary.containsKey("key1")).isFalse();
132+
}
133+
115134
@ParameterizedTest
116135
@MethodSource("generateDictionaries")
117136
void shouldAppendDictionary(MutableRefToRefDictionary<String, String> dictionary) {
@@ -138,6 +157,7 @@ void shouldAppendDictionary(MutableRefToRefDictionary<String, String> dictionary
138157

139158
private static Stream<Arguments> generateDictionaries() {
140159
return Stream.of(
160+
Arguments.of(MutableRefToRefDictionary.ofTypes(String.class, String.class)),
141161
Arguments.of(DictionaryFactory.mutableRefToRefDictionary()),
142162
Arguments.of(DictionaryFactory.stampedLockBasedRefToRefDictionary()));
143163
}

0 commit comments

Comments
 (0)