From ba691ef7a9ee4b0abd121dd487859f8fb38a0fa1 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Mon, 22 Jun 2015 17:30:12 +0200 Subject: Update api --- src/main/java/org/openslx/util/TimeoutHashMap.java | 102 +++++++++++++++++++++ .../java/org/openslx/util/TimeoutReference.java | 12 +++ 2 files changed, 114 insertions(+) create mode 100644 src/main/java/org/openslx/util/TimeoutHashMap.java (limited to 'src/main/java/org/openslx/util') diff --git a/src/main/java/org/openslx/util/TimeoutHashMap.java b/src/main/java/org/openslx/util/TimeoutHashMap.java new file mode 100644 index 0000000..3efb367 --- /dev/null +++ b/src/main/java/org/openslx/util/TimeoutHashMap.java @@ -0,0 +1,102 @@ +package org.openslx.util; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.Set; + +public class TimeoutHashMap implements Map +{ + + private final Map> map; + private final long timeout; + + public TimeoutHashMap( long timeout ) + { + this.map = new HashMap<>(); + this.timeout = timeout; + } + + @Override + public int size() + { + return map.size(); + } + + @Override + public boolean isEmpty() + { + return map.isEmpty(); + } + + @Override + public boolean containsKey( Object key ) + { + return map.containsKey( key ); + } + + @Override + public boolean containsValue( Object value ) + { + return map.containsValue( value ); + } + + @Override + public V get( Object key ) + { + TimeoutReference timeoutReference = map.get( key ); + if ( timeoutReference == null ) + return null; + return timeoutReference.get(); + } + + @Override + public V put( K key, V value ) + { + map.put( key, new TimeoutReference( + false, timeout, value ) ); + return value; + } + + @Override + public V remove( Object key ) + { + TimeoutReference remove = map.remove( key ); + if ( remove == null ) + return null; + return remove.get(); + } + + @Override + public void putAll( Map m ) + { + for ( java.util.Map.Entry entry : m.entrySet() ) { + put( entry.getKey(), entry.getValue() ); + } + } + + @Override + public void clear() + { + map.clear(); + } + + @Override + public Set keySet() + { + return map.keySet(); + } + + @Override + public Collection values() + { + throw new UnsupportedOperationException(); + } + + @Override + public Set> entrySet() + { + throw new UnsupportedOperationException(); + } + +} diff --git a/src/main/java/org/openslx/util/TimeoutReference.java b/src/main/java/org/openslx/util/TimeoutReference.java index 4d7a992..e86c6c7 100644 --- a/src/main/java/org/openslx/util/TimeoutReference.java +++ b/src/main/java/org/openslx/util/TimeoutReference.java @@ -46,4 +46,16 @@ public class TimeoutReference this.deadline = System.currentTimeMillis() + timeoutMs; } + @Override + public int hashCode() + { + return item.hashCode(); + } + + @Override + public boolean equals( Object o ) + { + return this == o || item.equals( o ); + } + } -- cgit v1.2.3-55-g7522