Package com.scratchdisk.util

Source Code of com.scratchdisk.util.SoftIntMap

/**
*  Copyright 2001-2004 The Apache Software Foundation
*
*  Licensed under the Apache License, Version 2.0 (the "License");
*  you may not use this file except in compliance with the License.
*  You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
*  Unless required by applicable law or agreed to in writing, software
*  distributed under the License is distributed on an "AS IS" BASIS,
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*  See the License for the specific language governing permissions and
*  limitations under the License.
*/

package com.scratchdisk.util;

import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;

public class SoftIntMap<V> extends IntMap<V> {

  public SoftIntMap() {
    super();
  }

  public SoftIntMap(int capacity, float loadFactor) {
    super(capacity, loadFactor);
  }

  /**
   *  ReferenceQueue used to eliminate stale mappings.
   */
  private transient ReferenceQueue<V> queue = new ReferenceQueue<V>();
 
  /**
   * Entry with a soft reference
   *
   * Dont use generics for the superclass, since it's storing the
   * value in a SoftReference<V> instead of V.
   */
 
  @SuppressWarnings("unchecked")
  private static class SoftEntry<V> extends Entry {
    public SoftEntry(int key, V value, Entry<V> next, ReferenceQueue<V> q) {
      super(key, new SoftReference<V>(value, q), next);
    }

    public V getValue() {
      return ((SoftReference<V>) value).get();
    }
  }

  @SuppressWarnings("unchecked")
  protected Entry<V> createEntry(int key, V value, Entry<V> next) {
    return new SoftEntry<V>(key, value, next, queue);
  }

  /**
   *  Purges stale mappings from this map.<P>
   *
   *  Ordinarily, stale mappings are only removed during
   *  a write operation; typically a write operation will   
   *  occur often enough that you'll never need to manually
   *  invoke this method.<P>
   *
   *  Note that this method is not synchronized!  Special
   *  care must be taken if, for instance, you want stale
   *  mappings to be removed on a periodic basis by some
   *  background thread.
   */
  protected void purge() {
    Reference ref = queue.poll();
    while (ref != null) {
      ref.clear();
      ref = queue.poll();
    }
  }

  /**
   * Clears this map.
   */
  public void clear() {
    super.clear();
    while (queue.poll() != null) {
      // drain the queue
    }
  }
}
TOP

Related Classes of com.scratchdisk.util.SoftIntMap

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.