in core/src/main/java/flex/messaging/io/amf/Amf3Output.java [333:415]
protected void writeArrayAsTypedVector(Object array, Class<?> componentType) throws IOException {
int vecType = kTypedVectorObject;
if (componentType.isPrimitive()) {
if (int.class.equals(componentType))
vecType = kTypedVectorInt;
else if (double.class.equals(componentType))
vecType = kTypedVectorDouble;
} else {
if (Integer.class.equals(componentType))
vecType = kTypedVectorInt;
else if (Double.class.equals(componentType))
vecType = kTypedVectorDouble;
}
out.write(vecType);
if (byReference(array))
return;
int length = Array.getLength(array);
writeUInt29((length << 1) | 1);
writeBoolean(true /*fixed*/);
switch (vecType) {
case kTypedVectorInt:
if (isDebug)
trace.startAMFVector(objectTable.size() - 1, VectorType.INT);
for (int i = 0; i < length; i++) {
if (isDebug)
trace.arrayElement(i);
Object element = Array.get(array, i);
int value = ((Integer) element).intValue();
if (isDebug)
trace.write(value);
writeInt(value);
}
break;
case kTypedVectorDouble:
if (isDebug)
trace.startAMFVector(objectTable.size() - 1, VectorType.DOUBLE);
for (int i = 0; i < length; i++) {
if (isDebug)
trace.arrayElement(i);
Object element = Array.get(array, i);
double value = ((Double) element).doubleValue();
if (isDebug)
trace.write(value);
writeDouble(value);
}
break;
case kTypedVectorObject:
if (isDebug)
trace.startAMFVector(objectTable.size() - 1, VectorType.OBJECT);
// TODO - I don't think this className is used properly on the client currently.
String className = componentType.getName();
writeStringWithoutType(className);
for (int i = 0; i < length; i++) {
if (isDebug)
trace.arrayElement(i);
Object element = Array.get(array, i);
increaseNestObjectLevel();
writeObject(element);
decreaseNestObjectLevel();
}
break;
default:
break;
}
if (isDebug)
trace.endAMFVector();
}