Memoizer.java 1.74 KB
package dagger.internal;

import java.util.LinkedHashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;

abstract class Memoizer<K, V>
{
  private final Map<K, V> map = new LinkedHashMap();
  private final Lock readLock;
  private final Lock writeLock;
  
  public Memoizer()
  {
    ReentrantReadWriteLock localReentrantReadWriteLock = new ReentrantReadWriteLock();
    this.readLock = localReentrantReadWriteLock.readLock();
    this.writeLock = localReentrantReadWriteLock.writeLock();
  }
  
  protected abstract V create(K paramK);
  
  public final V get(K paramK)
  {
    if (paramK == null) {
      throw new NullPointerException("key == null");
    }
    this.readLock.lock();
    Object localObject;
    try
    {
      localObject = this.map.get(paramK);
      if (localObject != null)
      {
        this.readLock.unlock();
        return (V)localObject;
      }
      this.readLock.unlock();
      localObject = create(paramK);
      if (localObject == null) {
        throw new NullPointerException("create returned null");
      }
    }
    finally
    {
      this.readLock.unlock();
    }
    this.writeLock.lock();
    try
    {
      this.map.put(paramK, localObject);
      return (V)localObject;
    }
    finally
    {
      this.writeLock.unlock();
    }
  }
  
  public final String toString()
  {
    this.readLock.lock();
    try
    {
      String str = this.map.toString();
      return str;
    }
    finally
    {
      this.readLock.unlock();
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/dagger/internal/Memoizer.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */