/**
   * Un-marshal an object instance from the data input stream
   *
   * @param o the object to un-marshal
   * @param dataIn the data input stream to build the object from
   * @throws IOException
   */
  @Override
  public void tightUnmarshal(
      OpenWireFormat wireFormat, Object o, DataInput dataIn, BooleanStream bs) throws IOException {
    super.tightUnmarshal(wireFormat, o, dataIn, bs);

    MessageAck info = (MessageAck) o;
    info.setDestination((OpenWireDestination) tightUnmarsalCachedObject(wireFormat, dataIn, bs));
    info.setTransactionId((TransactionId) tightUnmarsalCachedObject(wireFormat, dataIn, bs));
    info.setConsumerId((ConsumerId) tightUnmarsalCachedObject(wireFormat, dataIn, bs));
    info.setAckType(dataIn.readByte());
    info.setFirstMessageId((MessageId) tightUnmarsalNestedObject(wireFormat, dataIn, bs));
    info.setLastMessageId((MessageId) tightUnmarsalNestedObject(wireFormat, dataIn, bs));
    info.setMessageCount(dataIn.readInt());
  }
  /** Write the booleans that this object uses to a BooleanStream */
  @Override
  public void looseMarshal(OpenWireFormat wireFormat, Object o, DataOutput dataOut)
      throws IOException {
    MessageAck info = (MessageAck) o;

    super.looseMarshal(wireFormat, o, dataOut);
    looseMarshalCachedObject(wireFormat, info.getDestination(), dataOut);
    looseMarshalCachedObject(wireFormat, info.getTransactionId(), dataOut);
    looseMarshalCachedObject(wireFormat, info.getConsumerId(), dataOut);
    dataOut.writeByte(info.getAckType());
    looseMarshalNestedObject(wireFormat, info.getFirstMessageId(), dataOut);
    looseMarshalNestedObject(wireFormat, info.getLastMessageId(), dataOut);
    dataOut.writeInt(info.getMessageCount());
  }
  /**
   * Write a object instance to data output stream
   *
   * @param o the instance to be marshaled
   * @param dataOut the output stream
   * @throws IOException thrown if an error occurs
   */
  @Override
  public void tightMarshal2(
      OpenWireFormat wireFormat, Object o, DataOutput dataOut, BooleanStream bs)
      throws IOException {
    super.tightMarshal2(wireFormat, o, dataOut, bs);

    MessageAck info = (MessageAck) o;
    tightMarshalCachedObject2(wireFormat, info.getDestination(), dataOut, bs);
    tightMarshalCachedObject2(wireFormat, info.getTransactionId(), dataOut, bs);
    tightMarshalCachedObject2(wireFormat, info.getConsumerId(), dataOut, bs);
    dataOut.writeByte(info.getAckType());
    tightMarshalNestedObject2(wireFormat, info.getFirstMessageId(), dataOut, bs);
    tightMarshalNestedObject2(wireFormat, info.getLastMessageId(), dataOut, bs);
    dataOut.writeInt(info.getMessageCount());
  }
  /** Write the booleans that this object uses to a BooleanStream */
  @Override
  public int tightMarshal1(OpenWireFormat wireFormat, Object o, BooleanStream bs)
      throws IOException {
    MessageAck info = (MessageAck) o;

    int rc = super.tightMarshal1(wireFormat, o, bs);
    rc += tightMarshalCachedObject1(wireFormat, info.getDestination(), bs);
    rc += tightMarshalCachedObject1(wireFormat, info.getTransactionId(), bs);
    rc += tightMarshalCachedObject1(wireFormat, info.getConsumerId(), bs);
    rc += tightMarshalNestedObject1(wireFormat, info.getFirstMessageId(), bs);
    rc += tightMarshalNestedObject1(wireFormat, info.getLastMessageId(), bs);

    return rc + 5;
  }