@Override public void aggregate(ByteValue value) { agg += value.getValue(); }
@Override public void writeRecord(TriangleListing.Result<T> record) throws IOException { triangleCount[record.getBitmask().getValue()]++; }
@Override public boolean add(ByteValue value) { int newPosition = position + 1; if (newPosition > data.length) { if (isBounded) { return false; } else { ensureCapacity(newPosition); } } data[position] = value.getValue(); position = newPosition; return true; }
@Override public ByteValue copy(ByteValue from, ByteValue reuse) { reuse.setValue(from.getValue()); return reuse; }
@Override public void reduce(Iterable<Tuple3<T, T, ByteValue>> values, Collector<Tuple2<T, ByteValue>> out) throws Exception { byte bitmask = 0; for (Tuple3<T, T, ByteValue> value: values) { output.f0 = value.f0; bitmask |= value.f2.getValue(); } output.f1.setValue(bitmask); out.collect(output); } }
@Override public Result<T> join(Tuple4<T, T, T, ByteValue> triplet, Tuple3<T, T, ByteValue> edge) throws Exception { output.setVertexId0(triplet.f0); output.setVertexId1(triplet.f1); output.setVertexId2(triplet.f2); output.setBitmask((byte) (triplet.f3.getValue() | edge.f2.getValue())); return output; } }
@Override public LongValueWithProperHashCode translate(ByteValue value, LongValueWithProperHashCode reuse) throws Exception { if (reuse == null) { reuse = new LongValueWithProperHashCode(); } reuse.setValue(value.getValue() & 0xff); return reuse; } }
@Override public void reduce(Iterable<Tuple3<T, T, ByteValue>> values, Collector<Tuple3<T, T, ByteValue>> out) throws Exception { Tuple3<T, T, ByteValue> output = null; byte bitmask = 0; for (Tuple3<T, T, ByteValue> value: values) { output = value; bitmask |= value.f2.getValue(); } output.f2.setValue(bitmask); out.collect(output); } }
@Override public int hashCode() { if (hasher == null) { hasher = new MurmurHash(HASH_SEED); } return hasher.reset() .hash(getVertexId0().hashCode()) .hash(getVertexId1().hashCode()) .hash(getVertexId2().hashCode()) .hash(bitmask.getValue()) .hash(); } }
return ((ByteValue) value).getValue();
@Override public void reduce(Iterable<Tuple2<T, ByteValue>> values, Collector<Vertex<T, Degrees>> out) throws Exception { long degree = 0; long outDegree = 0; long inDegree = 0; for (Tuple2<T, ByteValue> edge : values) { output.f0 = edge.f0; byte bitmask = edge.f1.getValue(); degree++; if (bitmask == EdgeOrder.FORWARD.getBitmask()) { outDegree++; } else if (bitmask == EdgeOrder.REVERSE.getBitmask()) { inDegree++; } else { outDegree++; inDegree++; } } output.f1.getDegree().setValue(degree); output.f1.getOutDegree().setValue(outDegree); output.f1.getInDegree().setValue(inDegree); out.collect(output); } }
@Override public String toPrintableString() { byte bitmask = getBitmask().getValue(); return "1st vertex ID: " + getVertexId0() + ", 2nd vertex ID: " + getVertexId1() + ", 3rd vertex ID: " + getVertexId2() + ", edge directions: " + getVertexId0() + maskToString(bitmask, 4) + getVertexId1() + ", " + getVertexId0() + maskToString(bitmask, 2) + getVertexId2() + ", " + getVertexId1() + maskToString(bitmask, 0) + getVertexId2(); }
@Override public byte getByte(int i) { return ((ByteValue) fields[i]).getValue(); }
@Override public ByteValue copy(ByteValue from, ByteValue reuse) { reuse.setValue(from.getValue()); return reuse; }
@Override public void reduce(Iterable<Tuple3<T, T, ByteValue>> values, Collector<Tuple2<T, ByteValue>> out) throws Exception { byte bitmask = 0; for (Tuple3<T, T, ByteValue> value: values) { output.f0 = value.f0; bitmask |= value.f2.getValue(); } output.f1.setValue(bitmask); out.collect(output); } }
@Override public Result<T> join(Tuple4<T, T, T, ByteValue> triplet, Tuple3<T, T, ByteValue> edge) throws Exception { output.setVertexId0(triplet.f0); output.setVertexId1(triplet.f1); output.setVertexId2(triplet.f2); output.setBitmask((byte) (triplet.f3.getValue() | edge.f2.getValue())); return output; } }
@Override public Result<T> join(Tuple4<T, T, T, ByteValue> triplet, Tuple3<T, T, ByteValue> edge) throws Exception { output.setVertexId0(triplet.f0); output.setVertexId1(triplet.f1); output.setVertexId2(triplet.f2); output.setBitmask((byte) (triplet.f3.getValue() | edge.f2.getValue())); return output; } }
@Override public void reduce(Iterable<Tuple3<T, T, ByteValue>> values, Collector<Tuple2<T, ByteValue>> out) throws Exception { byte bitmask = 0; for (Tuple3<T, T, ByteValue> value: values) { output.f0 = value.f0; bitmask |= value.f2.getValue(); } output.f1.setValue(bitmask); out.collect(output); } }