This commit is contained in:
@@ -62,6 +62,10 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
|
||||
|
||||
@Override
|
||||
public T[] convertFrom(Reader in) {
|
||||
return convertFrom(in, null);
|
||||
}
|
||||
|
||||
public T[] convertFrom(Reader in, DeMember member) {
|
||||
int len = in.readArrayB();
|
||||
int contentLength = -1;
|
||||
if (len == Reader.SIGN_NULL) return null;
|
||||
@@ -85,6 +89,7 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
|
||||
if (len == Reader.SIGN_NOLENGTH) {
|
||||
int startPosition = in.position();
|
||||
while (in.hasNext(startPosition, contentLength)) {
|
||||
readMember(in, member);
|
||||
result.add(localdecoder.convertFrom(in));
|
||||
}
|
||||
} else {
|
||||
@@ -97,6 +102,9 @@ public class ArrayDecoder<T> implements Decodeable<Reader, T[]> {
|
||||
return result.toArray(rs);
|
||||
}
|
||||
|
||||
protected void readMember(Reader in, DeMember member) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.getClass().getSimpleName() + "{componentType:" + this.componentType + ", decoder:" + this.decoder + "}";
|
||||
|
||||
@@ -57,6 +57,10 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
|
||||
|
||||
@Override
|
||||
public void convertTo(Writer out, T[] value) {
|
||||
convertTo(out, null, value);
|
||||
}
|
||||
|
||||
public void convertTo(Writer out, EnMember member, T[] value) {
|
||||
if (value == null) {
|
||||
out.writeNull();
|
||||
return;
|
||||
@@ -82,13 +86,17 @@ public class ArrayEncoder<T> implements Encodeable<Writer, T[]> {
|
||||
boolean first = true;
|
||||
for (Object v : value) {
|
||||
if (!first) out.writeArrayMark();
|
||||
((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder).convertTo(out, v);
|
||||
writeValue(out, member, ((v != null && (v.getClass() == comp || out.specify() == comp)) ? encoder : anyEncoder), v);
|
||||
if (first) first = false;
|
||||
}
|
||||
}
|
||||
out.writeArrayE();
|
||||
}
|
||||
|
||||
protected void writeValue(Writer out, EnMember member, Encodeable<Writer, Object> encoder, Object value) {
|
||||
encoder.convertTo(out, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return this.getClass().getSimpleName() + "{componentType:" + this.componentType + ", encoder:" + this.encoder + "}";
|
||||
|
||||
@@ -62,6 +62,10 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
|
||||
|
||||
@Override
|
||||
public Collection<T> convertFrom(Reader in) {
|
||||
return convertFrom(in, null);
|
||||
}
|
||||
|
||||
public Collection<T> convertFrom(Reader in, DeMember member) {
|
||||
int len = in.readArrayB();
|
||||
int contentLength = -1;
|
||||
if (len == Reader.SIGN_NULL) return null;
|
||||
@@ -85,6 +89,7 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
|
||||
if (len == Reader.SIGN_NOLENGTH) {
|
||||
int startPosition = in.position();
|
||||
while (in.hasNext(startPosition, contentLength)) {
|
||||
readMember(in, member);
|
||||
result.add(localdecoder.convertFrom(in));
|
||||
}
|
||||
} else {
|
||||
@@ -96,6 +101,9 @@ public class CollectionDecoder<T> implements Decodeable<Reader, Collection<T>> {
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void readMember(Reader in, DeMember member) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
|
||||
@@ -52,6 +52,10 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
|
||||
|
||||
@Override
|
||||
public void convertTo(Writer out, Collection<T> value) {
|
||||
convertTo(out, null, value);
|
||||
}
|
||||
|
||||
public void convertTo(Writer out, EnMember member, Collection<T> value) {
|
||||
if (value == null) {
|
||||
out.writeNull();
|
||||
return;
|
||||
@@ -76,13 +80,17 @@ public class CollectionEncoder<T> implements Encodeable<Writer, Collection<T>> {
|
||||
boolean first = true;
|
||||
for (Object v : value) {
|
||||
if (!first) out.writeArrayMark();
|
||||
encoder.convertTo(out, v);
|
||||
writeValue(out, member, v);
|
||||
if (first) first = false;
|
||||
}
|
||||
}
|
||||
out.writeArrayE();
|
||||
}
|
||||
|
||||
protected void writeValue(Writer out, EnMember member, Object value) {
|
||||
encoder.convertTo(out, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
|
||||
@@ -76,6 +76,10 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
|
||||
|
||||
@Override
|
||||
public Map<K, V> convertFrom(Reader in) {
|
||||
return convertFrom(in, null);
|
||||
}
|
||||
|
||||
public Map<K, V> convertFrom(Reader in, DeMember member) {
|
||||
if (this.keyDecoder == null || this.valueDecoder == null) {
|
||||
if (!this.inited) {
|
||||
synchronized (lock) {
|
||||
@@ -98,15 +102,19 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
|
||||
if (len == Reader.SIGN_NOLENGTH) {
|
||||
int startPosition = in.position();
|
||||
while (in.hasNext(startPosition, contentLength)) {
|
||||
readKeyMember(in, member);
|
||||
K key = keyDecoder.convertFrom(in);
|
||||
in.readBlank();
|
||||
readValueMember(in, member);
|
||||
V value = valueDecoder.convertFrom(in);
|
||||
result.put(key, value);
|
||||
}
|
||||
} else {
|
||||
for (int i = 0; i < len; i++) {
|
||||
readKeyMember(in, member);
|
||||
K key = keyDecoder.convertFrom(in);
|
||||
in.readBlank();
|
||||
readValueMember(in, member);
|
||||
V value = valueDecoder.convertFrom(in);
|
||||
result.put(key, value);
|
||||
}
|
||||
@@ -115,6 +123,12 @@ public class MapDecoder<K, V> implements Decodeable<Reader, Map<K, V>> {
|
||||
return result;
|
||||
}
|
||||
|
||||
protected void readKeyMember(Reader in, DeMember member) {
|
||||
}
|
||||
|
||||
protected void readValueMember(Reader in, DeMember member) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return this.type;
|
||||
|
||||
@@ -53,6 +53,10 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
|
||||
|
||||
@Override
|
||||
public void convertTo(Writer out, Map<K, V> value) {
|
||||
convertTo(out, null, value);
|
||||
}
|
||||
|
||||
public void convertTo(Writer out, EnMember member, Map<K, V> value) {
|
||||
final Map<K, V> values = value;
|
||||
if (values == null) {
|
||||
out.writeNull();
|
||||
@@ -74,15 +78,23 @@ public class MapEncoder<K, V> implements Encodeable<Writer, Map<K, V>> {
|
||||
boolean first = true;
|
||||
for (Map.Entry<K, V> en : values.entrySet()) {
|
||||
if (!first) out.writeArrayMark();
|
||||
this.keyencoder.convertTo(out, en.getKey());
|
||||
writeKey(out, member, en.getKey());
|
||||
out.writeMapMark();
|
||||
this.valencoder.convertTo(out, en.getValue());
|
||||
writeValue(out, member, en.getValue());
|
||||
if (first) first = false;
|
||||
}
|
||||
}
|
||||
out.writeMapE();
|
||||
}
|
||||
|
||||
protected void writeKey(Writer out, EnMember member, K key) {
|
||||
keyencoder.convertTo(out, key);
|
||||
}
|
||||
|
||||
protected void writeValue(Writer out, EnMember member, V value) {
|
||||
valencoder.convertTo(out, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
|
||||
@@ -58,6 +58,10 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
|
||||
|
||||
@Override
|
||||
public Stream<T> convertFrom(Reader in) {
|
||||
return convertFrom(in, null);
|
||||
}
|
||||
|
||||
public Stream<T> convertFrom(Reader in, DeMember member) {
|
||||
int len = in.readArrayB();
|
||||
int contentLength = -1;
|
||||
if (len == Reader.SIGN_NULL) return null;
|
||||
@@ -81,6 +85,7 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
|
||||
if (len == Reader.SIGN_NOLENGTH) {
|
||||
int startPosition = in.position();
|
||||
while (in.hasNext(startPosition, contentLength)) {
|
||||
readMember(in, member);
|
||||
result.add(localdecoder.convertFrom(in));
|
||||
}
|
||||
} else {
|
||||
@@ -92,6 +97,9 @@ public class StreamDecoder<T> implements Decodeable<Reader, Stream<T>> {
|
||||
return result.stream();
|
||||
}
|
||||
|
||||
protected void readMember(Reader in, DeMember member) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
|
||||
@@ -52,6 +52,10 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
|
||||
|
||||
@Override
|
||||
public void convertTo(Writer out, Stream<T> value) {
|
||||
convertTo(out, null, value);
|
||||
}
|
||||
|
||||
public void convertTo(Writer out, EnMember member, Stream<T> value) {
|
||||
if (value == null) {
|
||||
out.writeNull();
|
||||
return;
|
||||
@@ -77,13 +81,17 @@ public class StreamEncoder<T> implements Encodeable<Writer, Stream<T>> {
|
||||
boolean first = true;
|
||||
for (Object v : array) {
|
||||
if (!first) out.writeArrayMark();
|
||||
encoder.convertTo(out, v);
|
||||
writeValue(out, member, v);
|
||||
if (first) first = false;
|
||||
}
|
||||
}
|
||||
out.writeArrayE();
|
||||
}
|
||||
|
||||
protected void writeValue(Writer out, EnMember member, Object value) {
|
||||
encoder.convertTo(out, value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Type getType() {
|
||||
return type;
|
||||
|
||||
Reference in New Issue
Block a user