| package edu.uci.ics.hivesterix.runtime.factory.normalize; |
| |
| import edu.uci.ics.hivesterix.serde.lazy.LazyUtils; |
| import edu.uci.ics.hivesterix.serde.lazy.LazyUtils.VInt; |
| import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputer; |
| import edu.uci.ics.hyracks.api.dataflow.value.INormalizedKeyComputerFactory; |
| import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable; |
| |
| public class HiveStringAscNormalizedKeyComputerFactory implements INormalizedKeyComputerFactory { |
| |
| private static final long serialVersionUID = 1L; |
| |
| @Override |
| public INormalizedKeyComputer createNormalizedKeyComputer() { |
| |
| return new INormalizedKeyComputer() { |
| private VInt len = new VInt(); |
| |
| @Override |
| public int normalize(byte[] bytes, int start, int length) { |
| LazyUtils.readVInt(bytes, start, len); |
| |
| if (len.value + len.length != length) |
| throw new IllegalStateException("parse string: length mismatch, expected " |
| + (len.value + len.length) + " but get " + length); |
| int nk = 0; |
| int offset = start + len.length; |
| for (int i = 0; i < 2; ++i) { |
| nk <<= 16; |
| if (i < len.value) { |
| char character = UTF8StringPointable.charAt(bytes, offset); |
| nk += ((int) character) & 0xffff; |
| offset += UTF8StringPointable.charSize(bytes, offset); |
| } |
| } |
| return nk; |
| } |
| }; |
| } |
| } |