Skip to content

Commit 03e2223

Browse files
committed
[broker-23] rework splitTopic
1 parent 00e0d28 commit 03e2223

File tree

3 files changed

+21
-18
lines changed

3 files changed

+21
-18
lines changed

src/main/java/com/ss/mqtt/broker/model/SharedSubscriber.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212

1313
public class SharedSubscriber implements Subscriber {
1414

15+
private static @NotNull SingleSubscriber next(@NotNull Array<SingleSubscriber> subscribers, int current) {
16+
return subscribers.get(current % subscribers.size());
17+
}
18+
1519
private final @NotNull SharedTopicFilter topicFilter;
1620
private final @NotNull ConcurrentArray<SingleSubscriber> subscribers;
1721
private final @NotNull AtomicInteger current;
@@ -40,10 +44,6 @@ public int size() {
4044
return subscribers.getInReadLock(Collection::size);
4145
}
4246

43-
private static @NotNull SingleSubscriber next(@NotNull Array<SingleSubscriber> subscribers, int current) {
44-
return subscribers.get(current % subscribers.size());
45-
}
46-
4747
public @NotNull String getGroup() {
4848
return topicFilter.getGroup();
4949
}

src/main/java/com/ss/mqtt/broker/model/topic/AbstractTopic.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
import static com.ss.mqtt.broker.util.TopicUtils.splitTopic;
44
import static com.ss.rlib.common.util.StringUtils.EMPTY;
55
import com.ss.mqtt.broker.util.DebugUtils;
6+
import com.ss.rlib.common.util.array.Array;
67
import lombok.EqualsAndHashCode;
78
import lombok.Getter;
89
import org.jetbrains.annotations.NotNull;
910

10-
import java.util.List;
11-
1211
@Getter
1312
@EqualsAndHashCode(of = "rawTopic")
1413
public abstract class AbstractTopic {
@@ -17,13 +16,13 @@ public abstract class AbstractTopic {
1716
DebugUtils.registerIncludedFields("rawTopic");
1817
}
1918

20-
private final @NotNull List<String> segments;
19+
private final @NotNull Array<String> segments;
2120
private final @NotNull String rawTopic;
2221
private final int length;
2322

2423
AbstractTopic() {
2524
length = 0;
26-
segments = List.of();
25+
segments = empty();
2726
rawTopic = EMPTY;
2827
}
2928

@@ -41,6 +40,10 @@ int levelsCount() {
4140
return segments.size();
4241
}
4342

43+
String lastSegment() {
44+
return segments.get(segments.size() - 1);
45+
}
46+
4447
@Override
4548
public @NotNull String toString() {
4649
return rawTopic;

src/main/java/com/ss/mqtt/broker/util/TopicUtils.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.ss.mqtt.broker.util;
22

3-
import static java.util.Collections.unmodifiableList;
3+
import static com.ss.rlib.common.util.array.ArrayFactory.newReadOnlyArray;
44
import com.ss.mqtt.broker.model.topic.SharedTopicFilter;
55
import com.ss.mqtt.broker.model.topic.TopicFilter;
66
import com.ss.mqtt.broker.model.topic.TopicName;
7+
import com.ss.rlib.common.util.array.Array;
78
import org.jetbrains.annotations.NotNull;
8-
9-
import java.util.ArrayList;
10-
import java.util.List;
9+
import org.springframework.util.StringUtils;
1110

1211
public class TopicUtils {
1312

@@ -55,15 +54,16 @@ public static boolean hasWildcard(@NotNull TopicFilter topicFilter) {
5554
}
5655
}
5756

58-
public static @NotNull List<String> splitTopic(@NotNull String topic) {
59-
var segments = new ArrayList<String>();
60-
int pos = 0, end;
57+
public static @NotNull Array<String> splitTopic(@NotNull String topic) {
58+
int segmentCount = StringUtils.countOccurrencesOf(topic, DELIMITER) + 1;
59+
var segments = new String[segmentCount];
60+
int i = 0, pos = 0, end;
6161
while ((end = topic.indexOf(DELIMITER, pos)) >= 0) {
62-
segments.add(topic.substring(pos, end));
62+
segments[i++] = topic.substring(pos, end);
6363
pos = end + 1;
6464
}
65-
segments.add(topic.substring(pos));
66-
return unmodifiableList(segments);
65+
segments[i] = topic.substring(pos);
66+
return newReadOnlyArray(segments);
6767
}
6868

6969
private static @NotNull TopicFilter newSharedTopicFilter(@NotNull String topicFilter) {

0 commit comments

Comments
 (0)