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