/**
   * Write the types for an array element in the arguments.
   *
   * @param array java.lang.Object[]
   */
  public void writeTypesArray(Object[] array) {
    // A big ol' case statement in a for loop -- what's polymorphism mean, again?
    // I really wish I could extend the base classes!

    for (int i = 0; i < array.length; i++) {
      if (null == array[i]) continue;
      // Create a way to deal with Boolean type objects
      if (Boolean.TRUE.equals(array[i])) {
        stream.write('T');
        continue;
      }
      if (Boolean.FALSE.equals(array[i])) {
        stream.write('F');
        continue;
      }
      // this is an object -- write the type for the class
      writeType(array[i].getClass());
    }
  }
  /**
   * Write types for the arguments (use a vector for jdk1.1 compatibility, rather than an
   * ArrayList).
   *
   * @param vector the arguments to an OSCMessage
   */
  public void writeTypes(Vector vector) {
    // A big ol' case statement in a for loop -- what's polymorphism mean, again?
    // I really wish I could extend the base classes!

    Enumeration enm = vector.elements();
    Object nextObject;
    while (enm.hasMoreElements()) {
      nextObject = enm.nextElement();
      if (null == nextObject) continue;
      // if the array at i is a type of array write a [
      // This is used for nested arguments
      if (nextObject.getClass().isArray()) {
        stream.write('[');
        // fill the [] with the SuperCollider types corresponding to the object
        // (e.g., Object of type String needs -s).
        writeTypesArray((Object[]) nextObject);
        // close the array
        stream.write(']');
        continue;
      }
      // Create a way to deal with Boolean type objects
      if (Boolean.TRUE.equals(nextObject)) {
        stream.write('T');
        continue;
      }
      if (Boolean.FALSE.equals(nextObject)) {
        stream.write('F');
        continue;
      }
      // go through the array and write the superCollider types as shown in the
      // above method. the Classes derived here are used as the arg to the above method
      writeType(nextObject.getClass());
    }
    // align the stream with padded bytes
    appendNullCharToAlignStream();
  }