Skip to content

Method: GameMemoryProvider()

1: package de.fhdw.gaming.ipspiel23.memory;
2:
3: import java.util.HashMap;
4: import java.util.Map;
5: import java.util.Optional;
6:
7: /**
8: *
9: * Implements {@link IGameMemoryProvider}.
10: */
11: public final class GameMemoryProvider implements IGameMemoryProvider {
12:
13: /**
14: * instance.
15: */
16: private static final GameMemoryProvider INSTANCE = new GameMemoryProvider();
17: /**
18: * Storage for the different memories.
19: */
20: private final Map<IGameMemoryIdentifier, IGameMemory<?>> memoryStore = new HashMap<>();
21:
22: /**
23: * private Constructor.
24: */
25: private GameMemoryProvider() {
26:
27: }
28:
29: /**
30: * Returns this memory provider.
31: * @return this.
32: */
33: public static IGameMemoryProvider getInstance() {
34: return INSTANCE;
35: }
36:
37:
38: @SuppressWarnings("unchecked")
39: @Override
40: public <ROUND_DATA> IGameMemory<ROUND_DATA> requestMemoryForStrategy(final IGameMemoryIdentifier reuseIdentifier,
41: final IGameMemoryCapacity capacity) {
42: final IGameMemory<?> memoryObj = this.memoryStore.getOrDefault(reuseIdentifier, null);
43: if (memoryObj == null) {
44: final IGameMemory<ROUND_DATA> memory = new GameMemory<>(capacity);
45: this.memoryStore.put(reuseIdentifier, memory);
46: return memory;
47: }
48: return (IGameMemory<ROUND_DATA>) memoryObj;
49: }
50:
51: @SuppressWarnings("unchecked")
52: @Override
53: public <ROUND_DATA> Optional<IGameMemory<ROUND_DATA>> tryRequestMemoryForStrategy(
54: final IGameMemoryIdentifier reuseIdentifier) {
55: final IGameMemory<?> memoryObj = this.memoryStore.getOrDefault(reuseIdentifier, null);
56: if (memoryObj == null) {
57: return Optional.empty();
58: }
59: return Optional.of((IGameMemory<ROUND_DATA>) memoryObj);
60: }
61: }