@Override public int size() { return vertices.size(); }
@Override public int size() { return vertices.size(); }
@Override public void sort() { if (sorted) return; Arrays.sort(vertices.buffer,0,vertices.size()); sorted = true; }
@Override public void sort() { if (sorted) return; Arrays.sort(vertices.buffer,0,vertices.size()); sorted = true; }
public List<EntryList> edgeMultiQuery(LongArrayList vids, SliceQuery query, BackendTransaction tx) { Preconditions.checkArgument(vids != null && !vids.isEmpty()); List<StaticBuffer> vertexIds = new ArrayList<StaticBuffer>(vids.size()); for (int i = 0; i < vids.size(); i++) { Preconditions.checkArgument(vids.get(i) > 0); vertexIds.add(idManager.getKey(vids.get(i))); } Map<StaticBuffer,EntryList> result = tx.edgeStoreMultiQuery(vertexIds, query); List<EntryList> resultList = new ArrayList<EntryList>(result.size()); for (StaticBuffer v : vertexIds) resultList.add(result.get(v)); return resultList; }
public List<EntryList> edgeMultiQuery(LongArrayList vertexIdsAsLongs, SliceQuery query, BackendTransaction tx) { Preconditions.checkArgument(vertexIdsAsLongs != null && !vertexIdsAsLongs.isEmpty()); final List<StaticBuffer> vertexIds = new ArrayList<>(vertexIdsAsLongs.size()); for (int i = 0; i < vertexIdsAsLongs.size(); i++) { Preconditions.checkArgument(vertexIdsAsLongs.get(i) > 0); vertexIds.add(idManager.getKey(vertexIdsAsLongs.get(i))); } final Map<StaticBuffer,EntryList> result = tx.edgeStoreMultiQuery(vertexIds, query); final List<EntryList> resultList = new ArrayList<>(result.size()); for (StaticBuffer v : vertexIds) resultList.add(result.get(v)); return resultList; }
public static LongArrayList mergeSort(LongArrayList a, LongArrayList b) { int posa=0, posb=0; LongArrayList result = new LongArrayList(a.size()+b.size()); while (posa<a.size() || posb<b.size()) { long next; if (posa>=a.size()) { next=b.get(posb++); } else if (posb>=b.size()) { next=a.get(posa++); } else if (a.get(posa)<=b.get(posb)) { next=a.get(posa++); } else { next=b.get(posb++); } Preconditions.checkArgument(result.isEmpty() || result.get(result.size()-1)<=next, "The input lists are not sorted"); result.add(next); } return result; }
@Override public String toString() { return "Way id:" + getId() + ", nodes:" + nodes.size() + ", tags:" + super.toString(); } }
public VertexArrayList toVertexArrayList() { VertexArrayList list = new VertexArrayList(tx); for (int i=0;i<vertices.size();i++) { list.add(get(i)); } return list; }
@Override public VertexList subList(int fromPosition, int length) { LongArrayList subList = new LongArrayList(length); subList.add(vertices.buffer, fromPosition, length); assert subList.size()==length; return new VertexLongList(tx,subList,sorted); }
@Override public VertexList subList(int fromPosition, int length) { LongArrayList subList = new LongArrayList(length); subList.add(vertices.buffer, fromPosition, length); assert subList.size()==length; return new VertexLongList(tx,subList,sorted); }
public VertexArrayList toVertexArrayList() { VertexArrayList list = new VertexArrayList(tx); for (int i=0;i<vertices.size();i++) { list.add(get(i)); } return list; }
public static boolean isSorted(LongArrayList l, final boolean unique) { for (int i = 1; i < l.size(); i++) { if (l.get(i) < l.get(i - 1) || (unique && l.get(i) == l.get(i - 1))) return false; } return true; }
/** * Filter ways but do not analyze properties wayNodes will be filled with participating node * ids. * <p> * * @return true the current xml entry is a way entry and has nodes */ boolean filterWay(ReaderWay item) { // ignore broken geometry if (item.getNodes().size() < 2) return false; // ignore multipolygon geometry if (!item.hasTags()) return false; return encodingManager.acceptWay(item) > 0; }
public static boolean isSorted(LongArrayList l, final boolean unique) { for (int i = 1; i < l.size(); i++) { if (l.get(i) < l.get(i - 1) || (unique && l.get(i) == l.get(i - 1))) return false; } return true; }
@Override public void add(TitanVertex n) { if (!vertices.isEmpty()) sorted = sorted && vertices.get(vertices.size()-1)<=n.longId(); vertices.add(n.longId()); }
@Override public void add(JanusGraphVertex n) { if (!vertices.isEmpty()) sorted = sorted && vertices.get(vertices.size()-1)<=n.longId(); vertices.add(n.longId()); }
@Override public void addAll(VertexList vertexlist) { LongArrayList othervertexids = null; if (vertexlist instanceof VertexLongList) { othervertexids = ((VertexLongList) vertexlist).vertices; } else if (vertexlist instanceof VertexArrayList) { VertexArrayList other = (VertexArrayList) vertexlist; othervertexids = new LongArrayList(other.size()); for (int i = 0; i < other.size(); i++) othervertexids.add(other.getID(i)); } else { throw new IllegalArgumentException("Unsupported vertex-list: " + vertexlist.getClass()); } if (sorted && vertexlist.isSorted()) { //Merge join vertices = AbstractLongListUtil.mergeSort(vertices,othervertexids); } else { sorted = false; vertices.add(othervertexids.buffer, 0, othervertexids.size()); } }
public void executeMultiQuery(final Collection<InternalVertex> vertices, final SliceQuery sq, final QueryProfiler profiler) { LongArrayList vids = new LongArrayList(vertices.size()); for (InternalVertex v : vertices) { if (!v.isNew() && v.hasId() && (v instanceof CacheVertex) && !v.hasLoadedRelations(sq)) vids.add(v.longId()); } if (!vids.isEmpty()) { List<EntryList> results = QueryProfiler.profile(profiler, sq, true, q -> graph.edgeMultiQuery(vids, q, txHandle)); int pos = 0; for (TitanVertex v : vertices) { if (pos<vids.size() && vids.get(pos) == v.longId()) { final EntryList vresults = results.get(pos); ((CacheVertex) v).loadRelations(sq, new Retriever<SliceQuery, EntryList>() { @Override public EntryList get(SliceQuery query) { return vresults; } }); pos++; } } } }
public void executeMultiQuery(final Collection<InternalVertex> vertices, final SliceQuery sq, final QueryProfiler profiler) { LongArrayList vertexIds = new LongArrayList(vertices.size()); for (InternalVertex v : vertices) { if (!v.isNew() && v.hasId() && (v instanceof CacheVertex) && !v.hasLoadedRelations(sq)) vertexIds.add(v.longId()); } if (!vertexIds.isEmpty()) { List<EntryList> results = QueryProfiler.profile(profiler, sq, true, q -> graph.edgeMultiQuery(vertexIds, q, txHandle)); int pos = 0; for (JanusGraphVertex v : vertices) { if (pos<vertexIds.size() && vertexIds.get(pos) == v.longId()) { final EntryList vresults = results.get(pos); ((CacheVertex) v).loadRelations(sq, query -> vresults); pos++; } } } }