@Override public void reduce(Iterable<Tuple4<IntValue, T, T, FloatValue>> values, Collector<Tuple3<T, T, FloatValue>> out) throws Exception { int visitedCount = 0; for (Tuple4<IntValue, T, T, FloatValue> edge : values) { output.f1 = edge.f2; output.f2 = edge.f3; for (int i = 0; i < visitedCount; i++) { output.f0 = visited.get(i); out.collect(output); } if (visitedCount < GROUP_SIZE) { if (!initialized) { initialized = true; for (int i = 0; i < GROUP_SIZE; i++) { visited.add(edge.f2.copy()); } } else { edge.f2.copyTo(visited.get(visitedCount)); } visitedCount += 1; } } } }
@Override public int getLength() { ensureInstanceInstantiated(); return instance.getBinaryLength(); }
@Override public T deserialize(T reuse, DataInputView source) throws IOException { reuse.read(source); return reuse; }
@Override public void aggregate(U val) { if (value != null) { int cmp = value.compareTo(val); if (cmp > 0) { value.setValue(val); } } else { value = val.copy(); } }
@Override public T copy(T from, T reuse) { from.copyTo(reuse); return reuse; }
@Override public void serialize(T value, DataOutputView target) throws IOException { value.write(target); }
@Override public void aggregate(U val) { if (value != null) { int cmp = value.compareTo(val); if (cmp < 0) { value.setValue(val); } } else { value = val.copy(); } }
@Override public void setReference(T toCompare) { toCompare.copyTo(reference); }
@Override public void serialize(T value, DataOutputView target) throws IOException { value.write(target); }
@Override public void reduce(Iterable<Tuple2<T, T>> values, Collector<Tuple3<T, T, T>> out) throws Exception { int visitedCount = 0; Iterator<Tuple2<T, T>> iter = values.iterator(); while (true) { Tuple2<T, T> edge = iter.next(); output.f0 = edge.f0; output.f2 = edge.f1; for (int i = 0; i < visitedCount; i++) { output.f1 = visited.get(i); out.collect(output); } if (!iter.hasNext()) { break; } if (visitedCount == visited.size()) { visited.add(edge.f1.copy()); } else { edge.f1.copyTo(visited.get(visitedCount)); } visitedCount += 1; } } }
@Override public void copy(DataInputView source, DataOutputView target) throws IOException { ensureInstanceInstantiated(); instance.copy(source, target); }
@Override public T copy(T from, T reuse) { from.copyTo(reuse); return reuse; }
@Override public int compareSerialized(DataInputView firstSource, DataInputView secondSource) throws IOException { if (tempReference == null) { tempReference = InstantiationUtil.instantiate(type, CopyableValue.class); } reference.read(firstSource); tempReference.read(secondSource); int comp = reference.compareTo(tempReference); return ascendingComparison ? comp : -comp; }
@Override public int getLength() { ensureInstanceInstantiated(); return instance.getBinaryLength(); }
@Override public void serialize(T value, DataOutputView target) throws IOException { value.write(target); }
@Test public void testCopy() { CopyableValue<?>[] value_types = new CopyableValue[] { new BooleanValue(true), new ByteValue((byte) 42), new CharValue('q'), new DoubleValue(3.1415926535897932), new FloatValue((float) 3.14159265), new IntValue(42), new LongValue(42L), new NullValue(), new ShortValue((short) 42), new StringValue("QED") }; for (CopyableValue<?> type : value_types) { assertEquals(type, type.copy()); } }
@Override public void setReference(T toCompare) { toCompare.copyTo(reference); }
@Override public T deserialize(T reuse, DataInputView source) throws IOException { reuse.read(source); return reuse; }
@Override public int getLength() { ensureInstanceInstantiated(); return instance.getBinaryLength(); }