Interners.java 2.53 KB
package com.google.common.collect;

import com.google.common.annotations.Beta;
import com.google.common.annotations.GwtIncompatible;
import com.google.common.base.Equivalence;
import com.google.common.base.Function;
import com.google.common.base.Preconditions;
import java.util.concurrent.ConcurrentMap;
import pc;
import pc.l;
import pc.m;

@Beta
public final class Interners
{
  public static <E> Function<E, E> asFunction(Interner<E> paramInterner)
  {
    return new a((Interner)Preconditions.checkNotNull(paramInterner));
  }
  
  public static <E> Interner<E> newStrongInterner()
  {
    new Interner()
    {
      public final E intern(E paramAnonymousE)
      {
        Object localObject = this.a.putIfAbsent(Preconditions.checkNotNull(paramAnonymousE), paramAnonymousE);
        if (localObject == null) {
          return paramAnonymousE;
        }
        return (E)localObject;
      }
    };
  }
  
  @GwtIncompatible("java.lang.ref.WeakReference")
  public static <E> Interner<E> newWeakInterner()
  {
    return new b((byte)0);
  }
  
  static final class a<E>
    implements Function<E, E>
  {
    private final Interner<E> a;
    
    public a(Interner<E> paramInterner)
    {
      this.a = paramInterner;
    }
    
    public final E apply(E paramE)
    {
      return (E)this.a.intern(paramE);
    }
    
    public final boolean equals(Object paramObject)
    {
      if ((paramObject instanceof a))
      {
        paramObject = (a)paramObject;
        return this.a.equals(((a)paramObject).a);
      }
      return false;
    }
    
    public final int hashCode()
    {
      return this.a.hashCode();
    }
  }
  
  static final class b<E>
    implements Interner<E>
  {
    private final pc<E, a> a = new pc(new MapMaker().weakKeys().a(Equivalence.equals()));
    
    public final E intern(E paramE)
    {
      do
      {
        Object localObject = this.a;
        if (paramE == null) {}
        int i;
        for (localObject = null; localObject != null; localObject = ((pc)localObject).a(i).a(paramE, i))
        {
          localObject = ((pc.l)localObject).d();
          if (localObject == null) {
            break;
          }
          return (E)localObject;
          i = ((pc)localObject).b(paramE);
        }
      } while ((a)this.a.putIfAbsent(paramE, a.a) != null);
      return paramE;
    }
    
    static enum a
    {
      private a() {}
    }
  }
}


/* Location:              /home/merong/decompile/hackery-dex2jar.jar!/com/google/common/collect/Interners.class
 * Java compiler version: 6 (50.0)
 * JD-Core Version:       0.7.1
 */