package edu.washington.escience.myria.column;
import java.nio.IntBuffer;
import com.google.protobuf.ByteString;
import edu.washington.escience.myria.proto.DataProto.ColumnMessage;
import edu.washington.escience.myria.proto.DataProto.IntColumnMessage;
/**
* An IntColumn that simply wraps a read-only Protobuf message.
*
*
*/
public final class IntProtoColumn extends IntColumn {
/** Required for Java serialization. */
private static final long serialVersionUID = 1L;
/** The ByteString containing the data. Immutable. */
private final ByteString columnData;
/** The Protobuf message containing the int column. */
private final IntBuffer intBuffer;
/**
* Construct a new IntProtoColumn wrapping the IntColumnMessage.
*
* @param message a Protobuf message containing a column of integers.
*/
public IntProtoColumn(final IntColumnMessage message) {
this(message.getData());
}
/**
* Construct a new IntProtoColumn using the ByteString data.
*
* @param data a byte string of data.
*/
public IntProtoColumn(final ByteString data) {
columnData = data;
intBuffer = columnData.asReadOnlyByteBuffer().asIntBuffer();
}
@Override
public Integer getObject(final int row) {
return Integer.valueOf(intBuffer.get(row));
}
@Override
public int getInt(final int row) {
return intBuffer.get(row);
}
@Override
public ColumnMessage serializeToProto() {
final IntColumnMessage.Builder inner = IntColumnMessage.newBuilder().setData(columnData);
return ColumnMessage.newBuilder().setType(ColumnMessage.Type.INT).setIntColumn(inner).build();
}
@Override
public int size() {
return intBuffer.limit();
}
}