protected void writeArrayAsTypedVector()

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();
    }