Example #1
0
  /** @see BTmsg#writeExternal(java.io.ObjectOutput) */
  @Override
  public void writeExternal(ObjectOutput out) throws IOException {
    super.writeExternal(out);

    assert this.offset < Short.MAX_VALUE;
    out.writeShort(this.offset);
    assert this.nbrAssignments < Short.MAX_VALUE;
    out.writeShort(this.nbrAssignments);
    V val = this.assignments[this.offset][0];
    out.writeObject(val); // first assignment
    final boolean externalize = val.externalize();

    // Write the assignments one by one
    for (int i = this.offset; i < this.nbrAssignments; i++) { // the assignments
      V[] assignment = this.assignments[i];
      assert assignment.length < Short.MAX_VALUE;
      out.writeShort(assignment.length);
      for (int j = assignment.length - 1; j >= 0; j--) {
        if (externalize) assignment[j].writeExternal(out);
        else out.writeObject(assignment[j]);
      }
    }

    out.writeObject(this.cost);
  }
Example #2
0
  /** @see BTmsg#readExternal(java.io.ObjectInput) */
  @SuppressWarnings("unchecked")
  @Override
  public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
    super.readExternal(in);

    // Read the number of assignments and the assignment to the first variable
    // so that we can instantiate the array of assignments
    this.offset = in.readShort();
    this.nbrAssignments = in.readShort();
    V val = (V) in.readObject();
    this.assignments =
        (V[][]) Array.newInstance(Array.newInstance(val.getClass(), 0).getClass(), nbrAssignments);
    final boolean externalize = val.externalize();

    // Read the assignments one by one
    for (int i = this.offset; i < this.nbrAssignments; i++) {
      short nbrVars = in.readShort();
      V[] assignment = (V[]) Array.newInstance(val.getClass(), nbrVars);
      this.assignments[i] = assignment;
      for (int j = nbrVars - 1; j >= 0; j--) {
        if (externalize) {
          val = val.getZero();
          val.readExternal(in);
          assignment[j] = (V) val.readResolve();
        } else assignment[j] = (V) in.readObject();
      }
    }

    this.cost = (U) in.readObject();
  }