package org.overture.interpreter.runtime; import java.util.HashMap; import java.util.Map; /** * Caching class used for custom serialization of context serialization of transient values * * @author kel */ class CloneTrancientMemoryCache<T> { static class EntryPair<K, V> implements Map.Entry<K, V> { public K key; public V value; public EntryPair(K key, V value) { this.key = key; this.value = value; } @Override public K getKey() { return key; } @Override public V getValue() { return value; } @Override public V setValue(V value) { return this.value = value; } @Override public String toString() { return key + " -> " + value; } } Map<Integer, EntryPair<Integer, T>> map = new HashMap<Integer, EntryPair<Integer, T>>(); public synchronized int store(T o) { Integer key = System.identityHashCode(o); EntryPair<Integer, T> val = map.get(key); if (val == null) { val = new EntryPair<Integer, T>(1, o); map.put(key, val); } else { val.key++; } return key; } public synchronized T load(Integer key) { EntryPair<Integer, T> val = map.get(key); if (val == null) { throw new RuntimeException("Not possible to decode cashed key"); } else { val.key--; } if (val.key == 0) { map.remove(key); } return val.value; } }