Wrapper(int capacity) { mCache = new org.cojen.util.SoftValueCache<K, V>(capacity); }
private boolean matches(Entry<K, V> e, K key, int hash) { return hash == e.mHash && (key == null ? e.mKey == null : keyEquals(key, e.mKey)); }
@Override public synchronized V get(K key) { int hash = key == null ? 0 : keyHashCode(key); Entry<K, V>[] entries = mEntries; int index = (hash & 0x7fffffff) % entries.length; for (Entry<K, V> e = entries[index]; e != null; e = e.mNext) { if (matches(e, key, hash)) { return e.get(); } } return null; }
@Override public synchronized V put(K key, V value) { int hash = key == null ? 0 : keyHashCode(key); Entry<K, V>[] entries = mEntries; int index = (hash & 0x7fffffff) % entries.length; for (Entry<K, V> e = entries[index], prev = null; e != null; e = e.mNext) { if (matches(e, key, hash)) { V old = e.get(); e.clear(); cleanup(); if (mSize >= mThreshold) { rehash(); entries = mEntries; index = (hash & 0x7fffffff) % entries.length;
public Class<?> resolveClass(String name) throws ClassNotFoundException { Class<?> clazz = mCache.get(name); if (clazz != null) { return clazz; Class<?> existing = mCache.putIfAbsent(name, clazz); return existing != null ? existing : clazz;
@Override public synchronized String toString() { if (isEmpty()) { return "{}"; } StringBuilder b = new StringBuilder(); b.append('{'); Entry<K, V>[] entries = mEntries; boolean any = false; for (int i=entries.length; --i>=0 ;) { for (Entry<K, V> e = entries[i]; e != null; e = e.mNext) { V value = e.get(); if (value != null) { if (any) { b.append(',').append(' '); } K key = e.mKey; b.append(key).append('=').append(value); any = true; } } } b.append('}'); return b.toString(); }
ClassLoaderResolver(ClassLoader loader) { mLoader = loader; mCache = new SoftValueCache<String, Class<?>>(101); }
@Override public synchronized V remove(K key) { int hash = key == null ? 0 : keyHashCode(key); Entry<K, V>[] entries = mEntries; int index = (hash & 0x7fffffff) % entries.length; for (Entry<K, V> e = entries[index], prev = null; e != null; e = e.mNext) { if (matches(e, key, hash)) { V old = e.get(); e.clear(); if (prev == null) { entries[index] = e.mNext; } else { prev.mNext = e.mNext; } mSize--; return old; } else { prev = e; } } return null; }
Wrapper(int capacity) { mCache = new org.cojen.util.SoftValueCache<K, V>(capacity); }
static <K, V> Cache<K, V> newSoftValueCache(int capacity) { return wrap(new org.cojen.util.SoftValueCache<K, V>(capacity)); }
innerCache = new SoftValueCache(5); cCache.put(factory, innerCache);