From 29a4f604ff41ebabc6b34cd079db6533c750d8dc Mon Sep 17 00:00:00 2001 From: peter Date: Sun, 10 Nov 2013 21:21:59 +0100 Subject: [PATCH] add accessOrder parameter to our LinkedHashMap --- .../com/intellij/util/containers/SLRUMap.java | 16 ++-------------- .../util/containers/hash/LinkedHashMap.java | 19 +++++++++++++------ .../src/com/intellij/util/io/PagePool.java | 13 ++----------- .../intellij/util/io/PagedFileStorage.java | 7 +------ .../containers/hash/LinkedHashMapTest.java | 16 ++-------------- .../tasks/youtrack/YouTrackIntellisense.java | 7 +------ 6 files changed, 21 insertions(+), 57 deletions(-) diff --git a/platform/util/src/com/intellij/util/containers/SLRUMap.java b/platform/util/src/com/intellij/util/containers/SLRUMap.java index e4df6bca95f2..3d66f95c5df5 100644 --- a/platform/util/src/com/intellij/util/containers/SLRUMap.java +++ b/platform/util/src/com/intellij/util/containers/SLRUMap.java @@ -48,7 +48,7 @@ public class SLRUMap { myProtectedQueueSize = protectedQueueSize * FACTOR; myProbationalQueueSize = probationalQueueSize * FACTOR; - myProtectedQueue = new LinkedHashMap(10, 0.6f, hashingStrategy) { + myProtectedQueue = new LinkedHashMap(10, 0.6f, hashingStrategy, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest, K key, V value) { if (size() > myProtectedQueueSize) { @@ -58,15 +58,9 @@ public class SLRUMap { return false; } - - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } - }; - myProbationalQueue = new LinkedHashMap(10, 0.6f, hashingStrategy) { + myProbationalQueue = new LinkedHashMap(10, 0.6f, hashingStrategy, true) { @Override protected boolean removeEldestEntry(final Map.Entry eldest, K key, V value) { if (size() > myProbationalQueueSize) { @@ -75,12 +69,6 @@ public class SLRUMap { } return false; } - - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } - }; } diff --git a/platform/util/src/com/intellij/util/containers/hash/LinkedHashMap.java b/platform/util/src/com/intellij/util/containers/hash/LinkedHashMap.java index e61076a67d36..9cc29915ba28 100644 --- a/platform/util/src/com/intellij/util/containers/hash/LinkedHashMap.java +++ b/platform/util/src/com/intellij/util/containers/hash/LinkedHashMap.java @@ -29,7 +29,7 @@ public class LinkedHashMap extends AbstractMap implements Map private int size; private final float loadFactor; private final EqualityPolicy hashingStrategy; - + private final boolean accessOrder; public LinkedHashMap() { this(0); @@ -38,19 +38,30 @@ public class LinkedHashMap extends AbstractMap implements Map public LinkedHashMap(int capacity) { this(capacity, HashUtil.DEFAULT_LOAD_FACTOR); } + public LinkedHashMap(int capacity, boolean accessOrder) { + this(capacity, HashUtil.DEFAULT_LOAD_FACTOR, accessOrder); + } public LinkedHashMap(int capacity, float loadFactor) { this(capacity, loadFactor, (EqualityPolicy)EqualityPolicy.CANONICAL); } + public LinkedHashMap(int capacity, float loadFactor, boolean accessOrder) { + this(capacity, loadFactor, (EqualityPolicy)EqualityPolicy.CANONICAL, accessOrder); + } + public LinkedHashMap(EqualityPolicy hashingStrategy) { this(0, HashUtil.DEFAULT_LOAD_FACTOR, hashingStrategy); } public LinkedHashMap(int capacity, float loadFactor, EqualityPolicy hashingStrategy) { + this(capacity, loadFactor, hashingStrategy, false); + } + public LinkedHashMap(int capacity, float loadFactor, EqualityPolicy hashingStrategy, boolean accessOrder) { this.loadFactor = loadFactor; this.hashingStrategy = hashingStrategy; clear(capacity); + this.accessOrder = accessOrder; } @Override @@ -200,12 +211,8 @@ public class LinkedHashMap extends AbstractMap implements Map size = 0; } - protected boolean shouldMoveEntryToTopWhenReading() { - return false; - } - private void moveToTop(final Entry e) { - if (!shouldMoveEntryToTopWhenReading()) { + if (!accessOrder) { return; } diff --git a/platform/util/src/com/intellij/util/io/PagePool.java b/platform/util/src/com/intellij/util/io/PagePool.java index bfc825274e0f..acb3a088b52f 100644 --- a/platform/util/src/com/intellij/util/io/PagePool.java +++ b/platform/util/src/com/intellij/util/io/PagePool.java @@ -45,7 +45,7 @@ public class PagePool { private PoolPageKey lastFinalizedKey = null; public PagePool(final int protectedPagesLimit, final int probationalPagesLimit) { - myProbationalQueue = new LinkedHashMap(probationalPagesLimit * 2, 0.6f) { + myProbationalQueue = new LinkedHashMap(probationalPagesLimit * 2, 0.6f, true) { @Override protected boolean removeEldestEntry(final Map.Entry eldest) { if (size() > probationalPagesLimit) { @@ -54,14 +54,9 @@ public class PagePool { } return false; } - - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } }; - myProtectedQueue = new LinkedHashMap(protectedPagesLimit, 0.6f) { + myProtectedQueue = new LinkedHashMap(protectedPagesLimit, 0.6f, true) { @Override protected boolean removeEldestEntry(final Map.Entry eldest) { if (size() > protectedPagesLimit) { @@ -70,10 +65,6 @@ public class PagePool { } return false; } - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } }; } diff --git a/platform/util/src/com/intellij/util/io/PagedFileStorage.java b/platform/util/src/com/intellij/util/io/PagedFileStorage.java index 845cc31d054f..6c4c9a3ed2bf 100644 --- a/platform/util/src/com/intellij/util/io/PagedFileStorage.java +++ b/platform/util/src/com/intellij/util/io/PagedFileStorage.java @@ -484,17 +484,12 @@ public class PagedFileStorage implements Forceable { myDefaultStorageLockContext = new StorageLockContext(this, checkThreadAccess); mySizeLimit = UPPER_LIMIT; - mySegments = new LinkedHashMap(10, 0.75f) { + mySegments = new LinkedHashMap(10, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return mySize > mySizeLimit; } - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } - @Nullable @Override public ByteBufferWrapper remove(Object key) { diff --git a/platform/util/testSrc/com/intellij/util/containers/hash/LinkedHashMapTest.java b/platform/util/testSrc/com/intellij/util/containers/hash/LinkedHashMapTest.java index 5e109c9df0cd..6d5db54769d0 100644 --- a/platform/util/testSrc/com/intellij/util/containers/hash/LinkedHashMapTest.java +++ b/platform/util/testSrc/com/intellij/util/containers/hash/LinkedHashMapTest.java @@ -135,17 +135,11 @@ public class LinkedHashMapTest { @Test public void lru2() { - final LinkedHashMap tested = new LinkedHashMap() { + final LinkedHashMap tested = new LinkedHashMap(0, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return size() > 1000; } - - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } - }; for (int i = 0; i < 1000; ++i) { tested.put(i, Integer.toString(i)); @@ -161,17 +155,11 @@ public class LinkedHashMapTest { @Test public void lru3() { - final LinkedHashMap tested = new LinkedHashMap() { + final LinkedHashMap tested = new LinkedHashMap(0, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { return size() > 1000; } - - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } - }; for (int i = 0; i < 1000; ++i) { tested.put(i, Integer.toString(i)); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/youtrack/YouTrackIntellisense.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/youtrack/YouTrackIntellisense.java index 27b9cf8231ad..609a8d787658 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/youtrack/YouTrackIntellisense.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/youtrack/YouTrackIntellisense.java @@ -56,15 +56,10 @@ public class YouTrackIntellisense { private final int myMaxSize; private SizeLimitedCache(int max) { - super((int)(max / 0.75) + 1); + super((int)(max / 0.75) + 1, true); myMaxSize = max; } - @Override - protected boolean shouldMoveEntryToTopWhenReading() { - return true; - } - @Override protected boolean removeEldestEntry(Map.Entry eldest, K key, V value) { return size() > myMaxSize;