Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  package com.webimageloader.loader;
  
  
 
 import java.util.Map;
 
 public class MemoryCache {
     private static final String TAG = "MemoryLoader";
 
     public static class Entry {
         public final Bitmap bitmap;
         public final Metadata metadata;
 
         private Entry(Bitmap bitmapMetadata metadata) {
             this. = bitmap;
             this. = metadata;
         }
     }
 
     private static class WeakEntry {
         public final WeakReference<Bitmapreference;
         public final Metadata metadata;
 
         private WeakEntry(Entry entry) {
             this. = new WeakReference<Bitmap>(entry.bitmap);
             this. = entry.metadata;
         }
 
         public Entry toEntry() {
             Bitmap b = .get();
             if (b == null) {
                 return null;
             } else {
                 return new Entry(b);
             }
         }
     }
 
     public static class DebugInfo {
         public final int hitCount;
         public final int missCount;
         public final int putCount;
         public final int evictionCount;
         public final int numImages;
 
         private DebugInfo(int hitCountint missCountint putCountint evictionCountint numImages) {
             this. = hitCount;
             this. = missCount;
             this. = putCount;
             this. = evictionCount;
             this. = numImages;
         }
     }
 
     private LruCache<StringEntrycache;
     private Map<StringWeakEntryexpired;
 
     public MemoryCache(int maxSize) {
          = new BitmapCache(maxSize);
          = Collections.synchronizedMap(new HashMap<StringWeakEntry>());
     }
 
     public int size() {
         return .size();
     }
 
     public int maxSize() {
         return .maxSize();
     }
 
     public void trimToSize(int maxSize) {
         .trimToSize(maxSize);
     }
 
     public void evictAll() {
         .evictAll();
         .clear();
     }
 
     public Entry get(LoaderRequest request) {
         if (request.hasFlag(..)) {
             return null;
         }
 
         String cacheKey = request.getCacheKey();
         Entry entry = .get(cacheKey);
         if (entry != null) {
             if (.) Log.v("Loaded " + request + " from memory");
        } else {
            WeakEntry weakEntry = .remove(cacheKey);
            if (weakEntry != null && (entry = weakEntry.toEntry()) != null) {
                .put(cacheKeyentry);
                if (.) Log.v("Loaded " + request + " from expired memory");
            }
        }
        return entry;
    }
    public void put(LoaderRequest requestBitmap bMetadata metadata) {
        if (request.hasFlag(..)) {
            return;
        }
        // Add the bitmap to the cache if we can fit at least six images of this size,
        // this way we avoid caching large images that will evict all other entries
        if (sizeOf(b) < .maxSize() / 6) {
            .put(request.getCacheKey(), new Entry(bmetadata));
        }
    }
    public void updateMetadata(LoaderRequest requestMetadata metadata) {
        String cacheKey = request.getCacheKey();
        Entry entry = .get(cacheKey);
        if (entry != null) {
            .put(cacheKeynew Entry(entry.bitmapmetadata));
        }
    }
    public DebugInfo getDebugInfo() {
        return new DebugInfo(.hitCount(), .missCount(), .putCount(), .evictionCount(), .snapshot().size());
    }
    @TargetApi(12)
    private static int sizeOf(Bitmap b) {
        if (Android.isAPI(12)) {
            return b.getByteCount();
        } else {
            return b.getRowBytes() * b.getHeight();
        }
    }
    private class BitmapCache extends LruCache<StringEntry> {
        public BitmapCache(int maxSize) {
            super(maxSize);
        }
        @Override
        protected int sizeOf(String keyEntry value) {
            Bitmap b = value.bitmap;
            return MemoryCache.sizeOf(b);
        }
        @Override
        protected void entryRemoved(boolean evictedString keyEntry oldValueEntry newValue) {
            if (evicted) {
                .put(keynew WeakEntry(oldValue));
            }
        }
    }
New to GrepCode? Check out our FAQ X