content: /*
   * Copyright (C) 2015 Actor LLC. <https://actor.im>
   */
  
  package im.actor.runtime.storage;
  
  import java.util.HashMap;
  import java.util.HashSet;
  
  public class ObjectCache<K, V> {
      protected final HashMap<K, V> memoryCache = new HashMap<K, V>();
      protected final HashSet<K> removedItems = new HashSet<K>();
      private boolean lockLoading = false;
  
      public synchronized void onObjectLoaded(K key, V value) {
          if (lockLoading) {
              return;
          }
          if (removedItems.contains(key)) {
              return;
          }
          if (memoryCache.containsKey(key)) {
              return;
          }
          memoryCache.put(key, value);
      }
  
      public synchronized void onObjectUpdated(K key, V value) {
          removedItems.remove(key);
          memoryCache.put(key, value);
      }
  
      public synchronized void removeObject(K key) {
          memoryCache.remove(key);
          removedItems.add(key);
      }
  
      public synchronized V lookup(K key) {
          return memoryCache.get(key);
      }
  
      public synchronized void clear() {
          memoryCache.clear();
          removedItems.clear();
      }
  
      public synchronized void startLock(){
          lockLoading = true;
      }
  
      public synchronized void stopLock(){
          lockLoading = false;
      }
  }
  