Conflicts: src/main/java/redis/clients/jedis/Connection.java src/main/java/redis/clients/jedis/Jedis.java src/main/java/redis/clients/jedis/ShardedJedis.java
148 lines
4.1 KiB
Java
148 lines
4.1 KiB
Java
package redis.clients.util;
|
|
|
|
import java.io.Serializable;
|
|
import java.util.Arrays;
|
|
import java.util.Collection;
|
|
import java.util.HashMap;
|
|
import java.util.HashSet;
|
|
import java.util.Iterator;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
public class JedisByteHashMap implements Map<byte[], byte[]>, Cloneable,
|
|
Serializable {
|
|
private static final long serialVersionUID = -6971431362627219416L;
|
|
private Map<ByteArrayWrapper, byte[]> internalMap = new HashMap<ByteArrayWrapper, byte[]>();
|
|
|
|
public void clear() {
|
|
internalMap.clear();
|
|
}
|
|
|
|
public boolean containsKey(Object key) {
|
|
if (key instanceof byte[])
|
|
return internalMap.containsKey(new ByteArrayWrapper((byte[]) key));
|
|
return internalMap.containsKey(key);
|
|
}
|
|
|
|
public boolean containsValue(Object value) {
|
|
return internalMap.containsValue(value);
|
|
}
|
|
|
|
public Set<java.util.Map.Entry<byte[], byte[]>> entrySet() {
|
|
Iterator<java.util.Map.Entry<ByteArrayWrapper, byte[]>> iterator = internalMap
|
|
.entrySet().iterator();
|
|
HashSet<Entry<byte[], byte[]>> hashSet = new HashSet<java.util.Map.Entry<byte[], byte[]>>();
|
|
while (iterator.hasNext()) {
|
|
Entry<ByteArrayWrapper, byte[]> entry = iterator.next();
|
|
hashSet.add(new JedisByteEntry(entry.getKey().data, entry
|
|
.getValue()));
|
|
}
|
|
return hashSet;
|
|
}
|
|
|
|
@Override
|
|
public byte[] get(Object key) {
|
|
if (key instanceof byte[])
|
|
return internalMap.get(new ByteArrayWrapper((byte[]) key));
|
|
return internalMap.get(key);
|
|
}
|
|
|
|
@Override
|
|
public boolean isEmpty() {
|
|
return internalMap.isEmpty();
|
|
}
|
|
|
|
@Override
|
|
public Set<byte[]> keySet() {
|
|
Set<byte[]> keySet = new HashSet<byte[]>();
|
|
Iterator<ByteArrayWrapper> iterator = internalMap.keySet().iterator();
|
|
while (iterator.hasNext()) {
|
|
keySet.add(iterator.next().data);
|
|
}
|
|
return keySet;
|
|
}
|
|
|
|
@Override
|
|
public byte[] put(byte[] key, byte[] value) {
|
|
return internalMap.put(new ByteArrayWrapper(key), value);
|
|
}
|
|
|
|
@SuppressWarnings("unchecked")
|
|
@Override
|
|
public void putAll(Map<? extends byte[], ? extends byte[]> m) {
|
|
Iterator<?> iterator = m.entrySet().iterator();
|
|
while (iterator.hasNext()) {
|
|
Entry<? extends byte[], ? extends byte[]> next = (Entry<? extends byte[], ? extends byte[]>) iterator
|
|
.next();
|
|
internalMap.put(new ByteArrayWrapper(next.getKey()), next
|
|
.getValue());
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public byte[] remove(Object key) {
|
|
if (key instanceof byte[])
|
|
return internalMap.remove(new ByteArrayWrapper((byte[]) key));
|
|
return internalMap.remove(key);
|
|
}
|
|
|
|
@Override
|
|
public int size() {
|
|
return internalMap.size();
|
|
}
|
|
|
|
@Override
|
|
public Collection<byte[]> values() {
|
|
return internalMap.values();
|
|
}
|
|
|
|
private final class ByteArrayWrapper {
|
|
private final byte[] data;
|
|
|
|
public ByteArrayWrapper(byte[] data) {
|
|
if (data == null) {
|
|
throw new NullPointerException();
|
|
}
|
|
this.data = data;
|
|
}
|
|
|
|
@Override
|
|
public boolean equals(Object other) {
|
|
if (!(other instanceof ByteArrayWrapper)) {
|
|
return false;
|
|
}
|
|
return Arrays.equals(data, ((ByteArrayWrapper) other).data);
|
|
}
|
|
|
|
@Override
|
|
public int hashCode() {
|
|
return Arrays.hashCode(data);
|
|
}
|
|
}
|
|
|
|
private final class JedisByteEntry implements Entry<byte[], byte[]> {
|
|
private byte[] value;
|
|
private byte[] key;
|
|
|
|
public JedisByteEntry(byte[] key, byte[] value) {
|
|
this.key = key;
|
|
this.value = value;
|
|
}
|
|
|
|
public byte[] getKey() {
|
|
return this.key;
|
|
}
|
|
|
|
@Override
|
|
public byte[] getValue() {
|
|
return this.value;
|
|
}
|
|
|
|
@Override
|
|
public byte[] setValue(byte[] value) {
|
|
this.value = value;
|
|
return value;
|
|
}
|
|
|
|
}
|
|
} |