package hdgl.db.protocol; import java.io.DataInput; import java.io.DataOutput; import java.io.IOException; import java.util.ArrayList; import org.apache.hadoop.io.Writable; public class MessageWritable implements Writable{ ArrayList<Integer> stateIds = new ArrayList<Integer>(); ArrayList<long[]> paths = new ArrayList<long[]>(); synchronized public void add(int stateId, long[] path){ stateIds.add(stateId); paths.add(path); } synchronized public void addAll(MessageWritable other){ stateIds.addAll(other.stateIds); paths.addAll(other.paths); } public int size(){ return stateIds.size(); } public int getState(int index){ return stateIds.get(index); } public long[] getPath(int index){ return paths.get(index); } @Override synchronized public void readFields(DataInput in) throws IOException { stateIds.clear(); paths.clear(); int len = in.readInt(); for(int i=0;i<len;i++){ int stateId=in.readInt(); int pathlen = in.readInt(); long[] path=new long[pathlen]; for(int j=0;j<pathlen;j++){ path[j]=in.readLong(); } stateIds.add(stateId); paths.add(path); } } @Override synchronized public void write(DataOutput out) throws IOException { int len = stateIds.size(); out.writeInt(len); for(int i=0; i<len; i++){ out.writeInt(stateIds.get(i)); long[] path=paths.get(i); out.writeInt(path.length); for(long p:path){ out.writeLong(p); } } } }