diff options
author | Anton Tananaev <anton@traccar.org> | 2023-12-17 11:43:51 -0800 |
---|---|---|
committer | Anton Tananaev <anton@traccar.org> | 2023-12-17 11:43:51 -0800 |
commit | c165968c2eb24b1c4a35dab39174b4df3576551c (patch) | |
tree | 6dae35ddec3feb14151e5c711f4d0f5865cbc64e /src/main/java/org/traccar/session/cache/CacheNode.java | |
parent | 4dc2e86ae5e403143b3c4e2c1a3bd671dfeaf5f8 (diff) | |
download | trackermap-server-c165968c2eb24b1c4a35dab39174b4df3576551c.tar.gz trackermap-server-c165968c2eb24b1c4a35dab39174b4df3576551c.tar.bz2 trackermap-server-c165968c2eb24b1c4a35dab39174b4df3576551c.zip |
Improve cache update performance
Diffstat (limited to 'src/main/java/org/traccar/session/cache/CacheNode.java')
-rw-r--r-- | src/main/java/org/traccar/session/cache/CacheNode.java | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/src/main/java/org/traccar/session/cache/CacheNode.java b/src/main/java/org/traccar/session/cache/CacheNode.java new file mode 100644 index 000000000..7b584f81a --- /dev/null +++ b/src/main/java/org/traccar/session/cache/CacheNode.java @@ -0,0 +1,40 @@ +package org.traccar.session.cache; + +import org.traccar.model.BaseModel; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; +import java.util.stream.Stream; + +public class CacheNode { + + private BaseModel value; + + private final Map<Class<? extends BaseModel>, Set<CacheNode>> links = new HashMap<>(); + private final Map<Class<? extends BaseModel>, Set<CacheNode>> backlinks = new HashMap<>(); + + public CacheNode(BaseModel value) { + this.value = value; + } + + public BaseModel getValue() { + return value; + } + + public void setValue(BaseModel value) { + this.value = value; + } + + public Set<CacheNode> getLinks(Class<? extends BaseModel> clazz, boolean forward) { + var map = forward ? links : backlinks; + return map.computeIfAbsent(clazz, k -> new HashSet<>()); + } + + public Stream<CacheNode> getAllLinks(boolean forward) { + var map = forward ? links : backlinks; + return map.values().stream().flatMap(Set::stream); + } + +} |