Skip to content

Commit e57470c

Browse files
author
Peter
committed
saving memory for preparation via not storing original edges (0.5gb for ww)
1 parent 9e4cf23 commit e57470c

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

core/src/main/java/com/graphhopper/routing/ch/PrepareContractionHierarchies.java

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -84,10 +84,12 @@ public class PrepareContractionHierarchies extends AbstractAlgoPreparation imple
8484
private double periodTime;
8585
private double lazyTime;
8686
private double neighborTime;
87+
private final int maxEdgesCount;
8788

8889
public PrepareContractionHierarchies( Directory dir, LevelGraph g, FlagEncoder encoder, Weighting weighting, TraversalMode traversalMode )
8990
{
9091
this.prepareGraph = g;
92+
maxEdgesCount = g.getAllEdges().getCount();
9193
this.traversalMode = traversalMode;
9294
this.prepareFlagEncoder = encoder;
9395
long scFwdDir = encoder.setAccess(0, true, false);
@@ -197,27 +199,12 @@ public void doWork()
197199
super.doWork();
198200

199201
initFromGraph();
200-
if (!prepareEdges())
201-
return;
202-
203202
if (!prepareNodes())
204203
return;
205204

206205
contractNodes();
207206
}
208207

209-
boolean prepareEdges()
210-
{
211-
EdgeIterator iter = prepareGraph.getAllEdges();
212-
int c = 0;
213-
while (iter.next())
214-
{
215-
c++;
216-
setOrigEdgeCount(iter.getEdge(), 1);
217-
}
218-
return c > 0;
219-
}
220-
221208
boolean prepareNodes()
222209
{
223210
int nodes = prepareGraph.getNodes();
@@ -793,17 +780,30 @@ public final boolean accept( EdgeIteratorState iter )
793780
}
794781
}
795782

796-
private void setOrigEdgeCount( int index, int value )
783+
private void setOrigEdgeCount( int edgeId, int value )
797784
{
798-
long tmp = (long) index * 4;
785+
edgeId -= maxEdgesCount;
786+
if (edgeId < 0)
787+
{
788+
if (value != 1)
789+
throw new IllegalStateException("Trying to set original edge count for normal edge to a value != 1");
790+
791+
// ignore setting as every normal edge has original edge count of 1
792+
return;
793+
}
794+
795+
long tmp = (long) edgeId * 4;
799796
originalEdges.ensureCapacity(tmp + 4);
800797
originalEdges.setInt(tmp, value);
801798
}
802799

803-
private int getOrigEdgeCount( int index )
800+
private int getOrigEdgeCount( int edgeId )
804801
{
805-
// TODO possible memory usage improvement: avoid storing the value 1 for normal edges (does not change)!
806-
long tmp = (long) index * 4;
802+
edgeId -= maxEdgesCount;
803+
if (edgeId < 0)
804+
return 1;
805+
806+
long tmp = (long) edgeId * 4;
807807
originalEdges.ensureCapacity(tmp + 4);
808808
return originalEdges.getInt(tmp);
809809
}

0 commit comments

Comments
 (0)