HCOLL-248 changed the ChronicleMap code and defaults regarding CharSequences/StringBuilders to fit CHMUseCases

This commit is contained in:
leventov
2014-12-16 12:40:21 +07:00
parent bcc5501499
commit d8df6d5717
5 changed files with 34 additions and 8 deletions
@@ -33,7 +33,16 @@ public final class CharSequenceReader<S extends CharSequence>
implements BytesReader<S>, StatefulCopyable<CharSequenceReader<S>> {
private static final long serialVersionUID = 0L;
private enum NoInterning implements CharSequenceInterner<String> {
private enum NoInterningIdentity implements CharSequenceInterner<CharSequence> {
INSTANCE;
@Override
public CharSequence intern(CharSequence cs) {
return cs;
}
}
private enum NoInterningToString implements CharSequenceInterner<String> {
INSTANCE;
@Override
public String intern(CharSequence cs) {
@@ -41,13 +50,20 @@ public final class CharSequenceReader<S extends CharSequence>
}
}
private static final CharSequenceReader<String> DEFAULT_READER =
new CharSequenceReader<String>(NoInterning.INSTANCE, NoInterning.INSTANCE);
private static final CharSequenceReader<String> STRING_READER =
new CharSequenceReader<String>(NoInterningToString.INSTANCE, NoInterningToString.INSTANCE);
public static CharSequenceReader<String> of() {
private static final CharSequenceReader DEFAULT_READER =
new CharSequenceReader(NoInterningIdentity.INSTANCE, NoInterningIdentity.INSTANCE);
public static CharSequenceReader of() {
return DEFAULT_READER;
}
public static CharSequenceReader<String> ofString() {
return STRING_READER;
}
public static <S extends CharSequence, I extends CharSequenceInterner<S> & Serializable>
CharSequenceReader<S> of(@NotNull I interner, @NotNull Serializable stateIdentity) {
return new CharSequenceReader<S>(interner, stateIdentity);
@@ -111,7 +127,9 @@ public final class CharSequenceReader<S extends CharSequence>
}
private Object readResolve() throws ObjectStreamException {
if (interner == NoInterning.INSTANCE)
if (interner == NoInterningToString.INSTANCE)
return STRING_READER;
if (interner == NoInterningIdentity.INSTANCE)
return DEFAULT_READER;
return this;
}
@@ -104,6 +104,8 @@ public final class ChronicleMapBuilder<K, V> implements Cloneable,
LoggerFactory.getLogger(ChronicleMapBuilder.class.getName());
public static final long DEFAULT_STATELESS_CLIENT_TIMEOUT = TimeUnit.SECONDS.toMillis(10);
private static final StringBuilder EMTRY_STRING_BUILDER = new StringBuilder();
SerializationBuilder<K> keyBuilder;
SerializationBuilder<V> valueBuilder;
@@ -148,6 +150,8 @@ public final class ChronicleMapBuilder<K, V> implements Cloneable,
if (CharSequence.class == valueClass)
defaultValue = (V) "";
if (StringBuilder.class == valueClass)
defaultValue = (V) EMTRY_STRING_BUILDER;
}
/**
@@ -127,9 +127,12 @@ final class SerializationBuilder<E> implements Cloneable, Serializable {
sizeMarshaller(byteableMarshaller);
reader(byteableMarshaller);
interop(byteableMarshaller);
} else if (eClass == CharSequence.class || eClass == String.class) {
} else if (eClass == CharSequence.class || eClass == StringBuilder.class) {
reader((BytesReader<E>) CharSequenceReader.of());
writer((BytesWriter<E>) CharSequenceWriter.instance());
} else if (eClass == String.class) {
reader((BytesReader<E>) CharSequenceReader.ofString());
writer((BytesWriter<E>) CharSequenceWriter.instance());
} else if (eClass == Void.class) {
sizeMarshaller(VoidMarshaller.INSTANCE);
reader((BytesReader<E>) VoidMarshaller.INSTANCE);
@@ -652,7 +652,7 @@ class VanillaChronicleMap<K, KI, MKI extends MetaBytesInterop<K, ? super KI>,
@Override
public V newValueInstance() {
if (vClass.equals(CharSequence.class) || vClass.equals(StringBuilder.class)) {
if (vClass == CharSequence.class || vClass == StringBuilder.class) {
return (V) new StringBuilder();
}