package hr.fer.zemris.vhdllab.applets.simulations; import java.util.HashMap; import java.util.Map; /** * Cache za objekte {@link SignalChangeEvent}. * * @author marcupic */ public class SignalChangeEventCache { /** * Mapa koja čuva objekte. */ private Map<String, SignalChangeEvent> cache; /** * Mapa koja predstavlja cache za vrijednosti, tako da nemamo * višestruke kopije stringova u memoriji. */ private Map<String, String> valueCache; /** * Konstruktor. */ public SignalChangeEventCache() { cache = new HashMap<String, SignalChangeEvent>(1000); valueCache = new HashMap<String, String>(); } /** * Dohvat objekta iz cache-a. Ako takav objekt ne postoji, biti * će stvoren i ubačen u cache. * * @param value vrijednost signala * @param time vrijeme promjene * @return traženi objekt */ public SignalChangeEvent get(String value, long time) { String val = valueCache.get(value); if(val==null) { val = value; valueCache.put(val, val); } value = val; String key = value + "\t" + time; SignalChangeEvent ev = cache.get(key); if(ev!=null) return ev; ev = new SignalChangeEvent(value, time); cache.put(key, ev); return ev; } }