blob: c707472d99c6e9e1afd3b6b0f15b404fb47fd19e [file] [log] [blame]
/*=========================================================================
* Copyright (c) 2010-2014 Pivotal Software, Inc. All Rights Reserved.
* This product is protected by U.S. and international copyright
* and intellectual property laws. Pivotal products are covered by
* one or more patents listed at http://www.pivotal.io/patents.
*=========================================================================
*/
package com.gemstone.gemfire.internal.cache;
import java.util.UUID;
public abstract class VMStatsDiskLRURegionEntryOffHeap extends VMStatsDiskLRURegionEntry implements OffHeapRegionEntry {
public VMStatsDiskLRURegionEntryOffHeap(RegionEntryContext context, Object value) {
super(context, value);
}
private static final VMStatsDiskLRURegionEntryOffHeapFactory factory = new VMStatsDiskLRURegionEntryOffHeapFactory();
public static RegionEntryFactory getEntryFactory() {
return factory;
}
private static class VMStatsDiskLRURegionEntryOffHeapFactory implements RegionEntryFactory {
public final RegionEntry createEntry(RegionEntryContext context, Object key, Object value) {
if (InlineKeyHelper.INLINE_REGION_KEYS) {
Class<?> keyClass = key.getClass();
if (keyClass == Integer.class) {
return new VMStatsDiskLRURegionEntryOffHeapIntKey(context, (Integer)key, value);
} else if (keyClass == Long.class) {
return new VMStatsDiskLRURegionEntryOffHeapLongKey(context, (Long)key, value);
} else if (keyClass == String.class) {
final String skey = (String) key;
final Boolean info = InlineKeyHelper.canStringBeInlineEncoded(skey);
if (info != null) {
final boolean byteEncoded = info;
if (skey.length() <= InlineKeyHelper.getMaxInlineStringKey(1, byteEncoded)) {
return new VMStatsDiskLRURegionEntryOffHeapStringKey1(context, skey, value, byteEncoded);
} else {
return new VMStatsDiskLRURegionEntryOffHeapStringKey2(context, skey, value, byteEncoded);
}
}
} else if (keyClass == UUID.class) {
return new VMStatsDiskLRURegionEntryOffHeapUUIDKey(context, (UUID)key, value);
}
}
return new VMStatsDiskLRURegionEntryOffHeapObjectKey(context, key, value);
}
public final Class getEntryClass() {
// The class returned from this method is used to estimate the memory size.
// TODO OFFHEAP: This estimate will not take into account the memory saved by inlining the keys.
return VMStatsDiskLRURegionEntryOffHeapObjectKey.class;
}
public RegionEntryFactory makeVersioned() {
return VersionedStatsDiskLRURegionEntryOffHeap.getEntryFactory();
}
@Override
public RegionEntryFactory makeOnHeap() {
return VMStatsDiskLRURegionEntryHeap.getEntryFactory();
}
}
}