Skip to content

Commit

Permalink
ignite-nio - Removing message clone
Browse files Browse the repository at this point in the history
  • Loading branch information
Valentin Kulichenko committed Feb 15, 2015
1 parent d674a08 commit f1d4194
Show file tree
Hide file tree
Showing 3 changed files with 116 additions and 118 deletions.
Expand Up @@ -62,6 +62,56 @@ public class CommunicationMessageCodeGenerator {
/** */ /** */
private static final String BUF_VAR = "buf"; private static final String BUF_VAR = "buf";


/** */
private static final Map<Class<?>, MessageAdapter.Type> TYPES = U.newHashMap(30);

static {
TYPES.put(byte.class, MessageAdapter.Type.BYTE);
TYPES.put(Byte.class, MessageAdapter.Type.BYTE);
TYPES.put(short.class, MessageAdapter.Type.SHORT);
TYPES.put(Short.class, MessageAdapter.Type.SHORT);
TYPES.put(int.class, MessageAdapter.Type.INT);
TYPES.put(Integer.class, MessageAdapter.Type.INT);
TYPES.put(long.class, MessageAdapter.Type.LONG);
TYPES.put(Long.class, MessageAdapter.Type.LONG);
TYPES.put(float.class, MessageAdapter.Type.FLOAT);
TYPES.put(Float.class, MessageAdapter.Type.FLOAT);
TYPES.put(double.class, MessageAdapter.Type.DOUBLE);
TYPES.put(Double.class, MessageAdapter.Type.DOUBLE);
TYPES.put(char.class, MessageAdapter.Type.CHAR);
TYPES.put(Character.class, MessageAdapter.Type.CHAR);
TYPES.put(boolean.class, MessageAdapter.Type.BOOLEAN);
TYPES.put(Boolean.class, MessageAdapter.Type.BOOLEAN);
TYPES.put(byte[].class, MessageAdapter.Type.BYTE_ARR);
TYPES.put(short[].class, MessageAdapter.Type.SHORT_ARR);
TYPES.put(int[].class, MessageAdapter.Type.INT_ARR);
TYPES.put(long[].class, MessageAdapter.Type.LONG_ARR);
TYPES.put(float[].class, MessageAdapter.Type.FLOAT_ARR);
TYPES.put(double[].class, MessageAdapter.Type.DOUBLE_ARR);
TYPES.put(char[].class, MessageAdapter.Type.CHAR_ARR);
TYPES.put(boolean[].class, MessageAdapter.Type.BOOLEAN_ARR);
TYPES.put(String.class, MessageAdapter.Type.STRING);
TYPES.put(BitSet.class, MessageAdapter.Type.BIT_SET);
TYPES.put(UUID.class, MessageAdapter.Type.UUID);
TYPES.put(IgniteUuid.class, MessageAdapter.Type.IGNITE_UUID);
}

/**
* @param cls Class.
* @return Type enum value.
*/
private static MessageAdapter.Type typeEnum(Class<?> cls) {
MessageAdapter.Type type = TYPES.get(cls);

if (type == null) {
assert MessageAdapter.class.isAssignableFrom(cls) : cls;

type = MessageAdapter.Type.MSG;
}

return type;
}

/** */ /** */
private final Collection<String> write = new ArrayList<>(); private final Collection<String> write = new ArrayList<>();


Expand Down Expand Up @@ -540,19 +590,19 @@ else if (BASE_CLS.isAssignableFrom(type))
returnFalseIfFailed(write, "writer.writeMessage", field, name); returnFalseIfFailed(write, "writer.writeMessage", field, name);
else if (type.isArray()) { else if (type.isArray()) {
returnFalseIfFailed(write, "writer.writeObjectArray", field, name, returnFalseIfFailed(write, "writer.writeObjectArray", field, name,
type.getComponentType().getSimpleName() + ".class"); "Type." + typeEnum(type.getComponentType()));
} }
else if (Collection.class.isAssignableFrom(type) && !Set.class.isAssignableFrom(type)) { else if (Collection.class.isAssignableFrom(type) && !Set.class.isAssignableFrom(type)) {
assert colItemType != null; assert colItemType != null;


returnFalseIfFailed(write, "writer.writeCollection", field, name, colItemType.getSimpleName() + ".class"); returnFalseIfFailed(write, "writer.writeCollection", field, name, "Type." + typeEnum(colItemType));
} }
else if (Map.class.isAssignableFrom(type)) { else if (Map.class.isAssignableFrom(type)) {
assert mapKeyType != null; assert mapKeyType != null;
assert mapValType != null; assert mapValType != null;


returnFalseIfFailed(write, "writer.writeMap", field, name, mapKeyType.getSimpleName() + ".class", returnFalseIfFailed(write, "writer.writeMap", field, name, "Type." + typeEnum(mapKeyType),
mapValType.getSimpleName() + ".class"); "Type." + typeEnum(mapKeyType));
} }
else else
throw new IllegalStateException("Unsupported type: " + type); throw new IllegalStateException("Unsupported type: " + type);
Expand Down Expand Up @@ -624,24 +674,21 @@ else if (type.isEnum()) {
} }
else if (BASE_CLS.isAssignableFrom(type)) else if (BASE_CLS.isAssignableFrom(type))
returnFalseIfReadFailed(name, "reader.readMessage", field); returnFalseIfReadFailed(name, "reader.readMessage", field);
else if (type.isArray()) { else if (type.isArray())
returnFalseIfReadFailed(name, "reader.readObjectArray", field, returnFalseIfReadFailed(name, "reader.readObjectArray", field, "Type." + typeEnum(type.getComponentType()));
type.getComponentType().getSimpleName() + ".class");
}
else if (Collection.class.isAssignableFrom(type) && !Set.class.isAssignableFrom(type)) { else if (Collection.class.isAssignableFrom(type) && !Set.class.isAssignableFrom(type)) {
assert colItemType != null; assert colItemType != null;


returnFalseIfReadFailed(name, "reader.readCollection", field, returnFalseIfReadFailed(name, "reader.readCollection", field, "Type." + typeEnum(colItemType));
colItemType.getSimpleName() + ".class");
} }
else if (Map.class.isAssignableFrom(type)) { else if (Map.class.isAssignableFrom(type)) {
assert mapKeyType != null; assert mapKeyType != null;
assert mapValType != null; assert mapValType != null;


boolean linked = type.equals(LinkedHashMap.class); boolean linked = type.equals(LinkedHashMap.class);


returnFalseIfReadFailed(name, "reader.readMap", field, mapKeyType.getSimpleName() + ".class", returnFalseIfReadFailed(name, "reader.readMap", field, "Type." + typeEnum(mapKeyType),
mapValType.getSimpleName() + ".class", linked ? "true" : "false"); "Type." + typeEnum(mapValType), linked ? "true" : "false");
} }
else else
throw new IllegalStateException("Unsupported type: " + type); throw new IllegalStateException("Unsupported type: " + type);
Expand Down
Expand Up @@ -206,56 +206,6 @@ public class DirectByteBufferStream {
/** */ /** */
private static final Object NULL = new Object(); private static final Object NULL = new Object();


/** */
private static final Map<Class<?>, Type> TYPES = U.newHashMap(30);

static {
TYPES.put(byte.class, Type.BYTE);
TYPES.put(Byte.class, Type.BYTE);
TYPES.put(short.class, Type.SHORT);
TYPES.put(Short.class, Type.SHORT);
TYPES.put(int.class, Type.INT);
TYPES.put(Integer.class, Type.INT);
TYPES.put(long.class, Type.LONG);
TYPES.put(Long.class, Type.LONG);
TYPES.put(float.class, Type.FLOAT);
TYPES.put(Float.class, Type.FLOAT);
TYPES.put(double.class, Type.DOUBLE);
TYPES.put(Double.class, Type.DOUBLE);
TYPES.put(char.class, Type.CHAR);
TYPES.put(Character.class, Type.CHAR);
TYPES.put(boolean.class, Type.BOOLEAN);
TYPES.put(Boolean.class, Type.BOOLEAN);
TYPES.put(byte[].class, Type.BYTE_ARR);
TYPES.put(short[].class, Type.SHORT_ARR);
TYPES.put(int[].class, Type.INT_ARR);
TYPES.put(long[].class, Type.LONG_ARR);
TYPES.put(float[].class, Type.FLOAT_ARR);
TYPES.put(double[].class, Type.DOUBLE_ARR);
TYPES.put(char[].class, Type.CHAR_ARR);
TYPES.put(boolean[].class, Type.BOOLEAN_ARR);
TYPES.put(String.class, Type.STRING);
TYPES.put(BitSet.class, Type.BIT_SET);
TYPES.put(UUID.class, Type.UUID);
TYPES.put(IgniteUuid.class, Type.IGNITE_UUID);
}

/**
* @param cls Class.
* @return Type enum value.
*/
private static Type type(Class<?> cls) {
Type type = TYPES.get(cls);

if (type == null) {
assert MessageAdapter.class.isAssignableFrom(cls) : cls;

type = Type.MSG;
}

return type;
}

/** */ /** */
private final MessageFactory msgFactory; private final MessageFactory msgFactory;


Expand Down Expand Up @@ -614,7 +564,7 @@ public <T> void writeObjectArray(T[] arr, Class<T> itemCls, MessageWriteState st
it = arrayIterator(arr); it = arrayIterator(arr);
} }


Type itemType = type(itemCls); MessageAdapter.Type itemType = null;//type(itemCls);


while (it.hasNext() || cur != NULL) { while (it.hasNext() || cur != NULL) {
if (cur == NULL) { if (cur == NULL) {
Expand Down Expand Up @@ -657,7 +607,7 @@ public <T> void writeCollection(Collection<T> col, Class<T> itemCls, MessageWrit
it = col.iterator(); it = col.iterator();
} }


Type itemType = type(itemCls); MessageAdapter.Type itemType = null;//type(itemCls);


while (it.hasNext() || cur != NULL) { while (it.hasNext() || cur != NULL) {
if (cur == NULL) { if (cur == NULL) {
Expand Down Expand Up @@ -702,8 +652,8 @@ public <K, V> void writeMap(Map<K, V> map, Class<K> keyCls, Class<V> valCls, Mes
it = map.entrySet().iterator(); it = map.entrySet().iterator();
} }


Type keyType = type(keyCls); MessageAdapter.Type keyType = null;//type(keyCls);
Type valType = type(valCls); MessageAdapter.Type valType = null;//type(valCls);


while (it.hasNext() || cur != NULL) { while (it.hasNext() || cur != NULL) {
Map.Entry<K, V> e; Map.Entry<K, V> e;
Expand Down Expand Up @@ -1044,7 +994,7 @@ public <T> T[] readObjectArray(Class<?> itemCls, MessageReader reader) {
if (objArr == null) if (objArr == null)
objArr = (Object[])Array.newInstance(itemCls, readSize); objArr = (Object[])Array.newInstance(itemCls, readSize);


Type itemType = type(itemCls); MessageAdapter.Type itemType = null;//type(itemCls);


for (int i = readItems; i < readSize; i++) { for (int i = readItems; i < readSize; i++) {
Object item = read(itemType, reader); Object item = read(itemType, reader);
Expand Down Expand Up @@ -1089,7 +1039,7 @@ public <C extends Collection<T>, T> C readCollection(Class<T> itemCls, MessageRe
if (col == null) if (col == null)
col = new ArrayList<>(readSize); col = new ArrayList<>(readSize);


Type itemType = type(itemCls); MessageAdapter.Type itemType = null;//type(itemCls);


for (int i = readItems; i < readSize; i++) { for (int i = readItems; i < readSize; i++) {
Object item = read(itemType, reader); Object item = read(itemType, reader);
Expand Down Expand Up @@ -1137,8 +1087,8 @@ public <M extends Map<K, V>, K, V> M readMap(Class<K> keyCls, Class<V> valCls, M
if (map == null) if (map == null)
map = linked ? U.newLinkedHashMap(readSize) : U.newHashMap(readSize); map = linked ? U.newLinkedHashMap(readSize) : U.newHashMap(readSize);


Type keyType = type(keyCls); MessageAdapter.Type keyType = null;//type(keyCls);
Type valType = type(valCls); MessageAdapter.Type valType = null;//type(valCls);


for (int i = readItems; i < readSize; i++) { for (int i = readItems; i < readSize; i++) {
if (!keyDone) { if (!keyDone) {
Expand Down Expand Up @@ -1324,7 +1274,7 @@ private <T> T readArray(ArrayCreator<T> creator, int lenShift, long off, int len
* @param type Type. * @param type Type.
* @param val Value. * @param val Value.
*/ */
private void write(Type type, Object val, MessageWriteState state) { private void write(MessageAdapter.Type type, Object val, MessageWriteState state) {
switch (type) { switch (type) {
case BYTE: case BYTE:
writeByte((Byte)val); writeByte((Byte)val);
Expand Down Expand Up @@ -1450,7 +1400,7 @@ private void write(Type type, Object val, MessageWriteState state) {
* @param reader Reader. * @param reader Reader.
* @return Value. * @return Value.
*/ */
private Object read(Type type, MessageReader reader) { private Object read(MessageAdapter.Type type, MessageReader reader) {
switch (type) { switch (type) {
case BYTE: case BYTE:
return readByte(); return readByte();
Expand Down Expand Up @@ -1555,50 +1505,4 @@ private static interface ArrayCreator<T> {
*/ */
public T create(int len); public T create(int len);
} }

/**
*/
private enum Type {
BYTE,

SHORT,

INT,

LONG,

FLOAT,

DOUBLE,

CHAR,

BOOLEAN,

BYTE_ARR,

SHORT_ARR,

INT_ARR,

LONG_ARR,

FLOAT_ARR,

DOUBLE_ARR,

CHAR_ARR,

BOOLEAN_ARR,

STRING,

BIT_SET,

UUID,

IGNITE_UUID,

MSG
}
} }
Expand Up @@ -83,4 +83,51 @@ public final void setReader(MessageReader reader) {
public boolean skipRecovery() { public boolean skipRecovery() {
return false; return false;
} }

/**
* TODO
*/
public enum Type {
BYTE,

SHORT,

INT,

LONG,

FLOAT,

DOUBLE,

CHAR,

BOOLEAN,

BYTE_ARR,

SHORT_ARR,

INT_ARR,

LONG_ARR,

FLOAT_ARR,

DOUBLE_ARR,

CHAR_ARR,

BOOLEAN_ARR,

STRING,

BIT_SET,

UUID,

IGNITE_UUID,

MSG
}
} }

0 comments on commit f1d4194

Please sign in to comment.