package org.apache.hadoop.hive.mastiff;
import java.io.DataInput;
import java.io.DataOutput;
import java.io.IOException;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.Reporter;
public class SerializeUtil {
public static final Log LOG = LogFactory.getLog(SerializeUtil.class.getName());
public static cn.ac.ncic.mastiff.mapred.MastiffMapReduce.TableDesc desc = null;
public static JobConf jc;
public static Properties tableProperties;
public static FileSystem fs;
public static Reporter reporter;
public static class PageId implements WritableComparable<PageId> {
String segmentId;
int clusterIdx;
int pageIdx;
int hashcode = 0;
public PageId() {
}
public PageId duplicate() {
PageId sid = new PageId();
sid.segmentId = new String(segmentId);
sid.clusterIdx = clusterIdx;
sid.pageIdx = pageIdx;
sid.hashcode = hashcode;
return sid;
}
public void copy(PageId sid) {
segmentId = sid.segmentId;
clusterIdx = sid.clusterIdx;
pageIdx = sid.pageIdx;
hashcode = sid.hashcode;
}
public boolean isInSameCluster(PageId sid) {
return segmentId.equals(sid.segmentId) && clusterIdx == sid.clusterIdx;
}
public boolean isInSameSegment(PageId sid) {
return segmentId.equals(sid.segmentId);
}
public void setSegmentId(String segmentId) {
this.segmentId = segmentId;
hashcode = segmentId.hashCode();
}
public String getPos() {
return segmentId;
}
public void setClusterId(int cluster) {
clusterIdx = cluster;
}
public int getClusterId() {
return clusterIdx;
}
public void setPageId(int pageId) {
pageIdx = pageId;
}
public int getPageId() {
return pageIdx;
}
@Override
public int compareTo(PageId other) {
int cmp = segmentId.compareTo(other.segmentId);
if (cmp == 0) {
cmp = clusterIdx - other.clusterIdx;
if (cmp == 0) {
return pageIdx - other.pageIdx;
} else {
return cmp;
}
}
return cmp;
}
@Override
public boolean equals(Object obj) {
if (!(obj instanceof PageId)) {
return false;
}
return compareTo((PageId) obj) == 0;
}
@Override
public int hashCode() {
return hashcode;
}
@Override
public void readFields(DataInput in) throws IOException {
clusterIdx = in.readInt();
pageIdx = in.readInt();
segmentId = Text.readString(in);
hashcode = segmentId.hashCode();
}
@Override
public void write(DataOutput out) throws IOException {
out.writeInt(clusterIdx);
out.writeInt(pageIdx);
Text.writeString(out, segmentId);
}
}
}