@Override protected BulkSet readValue(final ByteBuf buffer, final GraphBinaryReader context) throws SerializationException { final int length = buffer.readInt(); final BulkSet result = new BulkSet(); for (int i = 0; i < length; i++) { result.add(context.read(buffer), buffer.readLong()); } return result; }
@Override protected ByteBuf writeValue(final BulkSet value, final ByteBufAllocator allocator, final GraphBinaryWriter context) throws SerializationException { final Map<Object,Long> raw = value.asBulk(); final CompositeByteBuf result = allocator.compositeBuffer(1 + raw.size() * 2); result.addComponent(true, allocator.buffer(4).writeInt(raw.size())); for (Object key : raw.keySet()) { result.addComponents(true, context.write(key, allocator), allocator.buffer(8).writeLong(value.get(key))); } return result; } }
final BulkSet<Integer> bulkSet = intTraversal.toBulkSet(); assertFalse(intTraversal.hasNext()); assertEquals(4, bulkSet.uniqueSize()); assertEquals(5, bulkSet.longSize()); assertEquals(5, bulkSet.size()); assertTrue(bulkSet.contains(7)); assertTrue(bulkSet.contains(2)); assertTrue(bulkSet.contains(3)); assertTrue(bulkSet.contains(6)); assertEquals(2, bulkSet.get(7)); assertFalse(intTraversal.hasNext()); assertFalse(intTraversal.tryNext().isPresent());
@Override public boolean add(final S s) { return this.add(s, 1l); }
@Override public BulkSet<A> get() { return new BulkSet<>(); }
public BulkSetIterator(final BulkSet<Object> bulkSet) { itty = bulkSet.asBulk().entrySet().iterator(); }
private void checkSideEffects() { assertEquals(0, this.haltedTraversers.size()); assertTrue(this.haltedTraversers.isEmpty()); final TraversalSideEffects sideEffects = this.traversal.get().getSideEffects(); assertTrue(sideEffects instanceof MemoryTraversalSideEffects); assertEquals(1, sideEffects.keys().size()); assertFalse(sideEffects.exists(TraversalVertexProgram.HALTED_TRAVERSERS)); assertTrue(sideEffects.exists("x")); final BulkSet<String> bulkSet = sideEffects.get("x"); assertEquals(4, bulkSet.size()); assertEquals(4, bulkSet.get("java")); } }
@Test @LoadGraphWith(MODERN) public void shouldFilterOnIterate() { final Traversal<Vertex,String> traversal = g.V().out().out().<String>values("name").aggregate("x").iterate(); assertFalse(traversal.hasNext()); assertEquals(2, traversal.asAdmin().getSideEffects().<BulkSet>get("x").size()); assertTrue(traversal.asAdmin().getSideEffects().<BulkSet>get("x").contains("ripple")); assertTrue(traversal.asAdmin().getSideEffects().<BulkSet>get("x").contains("lop")); assertEquals(Traversal.Symbols.none, traversal.asAdmin().getBytecode().getStepInstructions().get(traversal.asAdmin().getBytecode().getStepInstructions().size()-1).getOperator()); }
@Override public int size() { return (int) this.longSize(); }
private void dumpItem(Object item, StringBuilder result) { if (item instanceof Vertex) { dumpVertex((Vertex) item, result); } else if (item instanceof Edge) { dumpEdge((Edge) item, result); } else if (item instanceof BulkSet) { BulkSet bulkSet = (BulkSet<Object>) item; bulkSet.forEach((obj, amount) -> { StringBuilder stringBuilder = new StringBuilder(); dumpItem(obj, stringBuilder); result.append(stringBuilder.toString() + "\n"); }); } else if (item instanceof LinkedHashMap) { Map<String, String> map = new HashMap<>(); LinkedHashMap lhm = (LinkedHashMap<String, Object>) item; lhm.forEach((key, obj) -> { StringBuilder stringBuilder = new StringBuilder(); dumpItem(obj, stringBuilder); map.put((String)key, stringBuilder.toString()); }); try { result.append(mapper.writeValueAsString(map)); } catch (JsonProcessingException e) { LOG.error(e.getMessage(), e); } } else { result.append(item); result.append(item).append("\n"); } }
final BulkSet<Integer> bulkSet = intTraversal.toBulkSet(); assertFalse(intTraversal.hasNext()); assertEquals(4, bulkSet.uniqueSize()); assertEquals(5, bulkSet.longSize()); assertEquals(5, bulkSet.size()); assertTrue(bulkSet.contains(7)); assertTrue(bulkSet.contains(2)); assertTrue(bulkSet.contains(3)); assertTrue(bulkSet.contains(6)); assertEquals(2, bulkSet.get(7)); assertFalse(intTraversal.hasNext()); assertFalse(intTraversal.tryNext().isPresent());
public static <S> void addToCollection(final Collection<S> collection, final S s, final long bulk) { if (collection instanceof BulkSet) { ((BulkSet<S>) collection).add(s, bulk); } else if (collection instanceof Set) { collection.add(s); } else { for (long i = 0; i < bulk; i++) { collection.add(s); } } }
/** * Put all the results into a {@link BulkSet}. * This can reduce both time and space when aggregating results by ensuring a weighted set. * * @return the results in a bulk set */ public default BulkSet<E> toBulkSet() { return this.fill(new BulkSet<>()); }
@Override public void serialize(final BulkSet bulkSet, final JsonGenerator jsonGenerator, final SerializerProvider serializerProvider) throws IOException { jsonGenerator.writeStartArray(); for (Map.Entry entry : (Set<Map.Entry>) bulkSet.asBulk().entrySet()) { jsonGenerator.writeObject(entry.getKey()); jsonGenerator.writeObject(entry.getValue()); } jsonGenerator.writeEndArray(); } }
private void checkSideEffects() { assertEquals(0, this.haltedTraversers.size()); assertTrue(this.haltedTraversers.isEmpty()); final TraversalSideEffects sideEffects = this.traversal.get().getSideEffects(); assertTrue(sideEffects instanceof MemoryTraversalSideEffects); assertEquals(1, sideEffects.keys().size()); assertFalse(sideEffects.exists(TraversalVertexProgram.HALTED_TRAVERSERS)); assertTrue(sideEffects.exists("x")); final BulkSet<String> bulkSet = sideEffects.get("x"); assertEquals(4, bulkSet.size()); assertEquals(4, bulkSet.get("java")); } }
@Test @LoadGraphWith(MODERN) public void shouldFilterOnIterate() { final Traversal<Vertex,String> traversal = g.V().out().out().<String>values("name").aggregate("x").iterate(); assertFalse(traversal.hasNext()); assertEquals(2, traversal.asAdmin().getSideEffects().<BulkSet>get("x").size()); assertTrue(traversal.asAdmin().getSideEffects().<BulkSet>get("x").contains("ripple")); assertTrue(traversal.asAdmin().getSideEffects().<BulkSet>get("x").contains("lop")); assertEquals(Traversal.Symbols.none, traversal.asAdmin().getBytecode().getStepInstructions().get(traversal.asAdmin().getBytecode().getStepInstructions().size()-1).getOperator()); }
@Override public int size() { return (int) this.longSize(); }
@Override public BulkSet deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext) throws IOException, JsonProcessingException { final BulkSet<Object> bulkSet = new BulkSet<>(); while (jsonParser.nextToken() != JsonToken.END_ARRAY) { final Object key = deserializationContext.readValue(jsonParser, Object.class); jsonParser.nextToken(); final Long val = deserializationContext.readValue(jsonParser, Long.class); bulkSet.add(key, val); } return bulkSet; }