separated build-in vars from BExpressionContext
This commit is contained in:
parent
53c3df66f5
commit
3ed62bb2b3
13 changed files with 280 additions and 72 deletions
|
@ -37,8 +37,8 @@ public final class RoutingContext implements DistanceChecker
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public BExpressionContext expctxWay;
|
public BExpressionContextWay expctxWay;
|
||||||
public BExpressionContext expctxNode;
|
public BExpressionContextNode expctxNode;
|
||||||
|
|
||||||
public boolean serversizing = false;
|
public boolean serversizing = false;
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,9 @@ import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import btools.expressions.BExpressionContext;
|
import btools.expressions.BExpressionContext;
|
||||||
|
import btools.expressions.BExpressionContextGlobal;
|
||||||
|
import btools.expressions.BExpressionContextNode;
|
||||||
|
import btools.expressions.BExpressionContextWay;
|
||||||
import btools.expressions.BExpressionMetaData;
|
import btools.expressions.BExpressionMetaData;
|
||||||
import btools.mapaccess.NodesCache;
|
import btools.mapaccess.NodesCache;
|
||||||
import btools.mapaccess.OsmLink;
|
import btools.mapaccess.OsmLink;
|
||||||
|
@ -80,9 +83,9 @@ public class RoutingEngine extends Thread
|
||||||
|
|
||||||
BExpressionMetaData meta = new BExpressionMetaData();
|
BExpressionMetaData meta = new BExpressionMetaData();
|
||||||
|
|
||||||
BExpressionContext expctxGlobal = new BExpressionContext( "global", meta );
|
BExpressionContextGlobal expctxGlobal = new BExpressionContextGlobal( meta );
|
||||||
rc.expctxWay = new BExpressionContext( "way", rc.serversizing ? 262144 : 4096, meta );
|
rc.expctxWay = new BExpressionContextWay( rc.serversizing ? 262144 : 4096, meta );
|
||||||
rc.expctxNode = new BExpressionContext( "node", rc.serversizing ? 16384 : 1024, meta );
|
rc.expctxNode = new BExpressionContextNode( rc.serversizing ? 16384 : 1024, meta );
|
||||||
|
|
||||||
meta.readMetaData( new File( profileDir, "lookups.dat" ) );
|
meta.readMetaData( new File( profileDir, "lookups.dat" ) );
|
||||||
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ import btools.util.Crc32;
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
|
|
||||||
public final class BExpressionContext
|
public abstract class BExpressionContext
|
||||||
{
|
{
|
||||||
private static final String CONTEXT_TAG = "---context:";
|
private static final String CONTEXT_TAG = "---context:";
|
||||||
|
|
||||||
|
@ -63,33 +63,23 @@ public final class BExpressionContext
|
||||||
private int minWriteIdx;
|
private int minWriteIdx;
|
||||||
|
|
||||||
// build-in variable indexes for fast access
|
// build-in variable indexes for fast access
|
||||||
private int costfactorIdx;
|
private int[] buildInVariableIdx;
|
||||||
private int turncostIdx;
|
|
||||||
private int uphillcostfactorIdx;
|
|
||||||
private int downhillcostfactorIdx;
|
|
||||||
private int initialcostIdx;
|
|
||||||
private int nodeaccessgrantedIdx;
|
|
||||||
|
|
||||||
private float[] _arrayCostfactor;
|
protected float[][] arrayBuildInVariablesCache;
|
||||||
private float[] _arrayTurncost;
|
|
||||||
private float[] _arrayUphillCostfactor;
|
|
||||||
private float[] _arrayDownhillCostfactor;
|
|
||||||
private float[] _arrayInitialcost;
|
|
||||||
private float[] _arrayNodeAccessGranted;
|
|
||||||
|
|
||||||
public float getCostfactor() { return _arrayCostfactor[currentHashBucket]; }
|
abstract String[] getBuildInVariableNames();
|
||||||
public float getTurncost() { return _arrayTurncost[currentHashBucket]; }
|
|
||||||
public float getUphillCostfactor() { return _arrayUphillCostfactor[currentHashBucket]; }
|
protected float getBuildInVariable( int idx )
|
||||||
public float getDownhillCostfactor() { return _arrayDownhillCostfactor[currentHashBucket]; }
|
{
|
||||||
public float getInitialcost() { return _arrayInitialcost[currentHashBucket]; }
|
return arrayBuildInVariablesCache[idx][currentHashBucket];
|
||||||
public float getNodeAccessGranted() { return _arrayNodeAccessGranted[currentHashBucket]; }
|
}
|
||||||
|
|
||||||
private int linenr;
|
private int linenr;
|
||||||
|
|
||||||
public BExpressionMetaData meta;
|
public BExpressionMetaData meta;
|
||||||
private boolean lookupDataValid = false;
|
private boolean lookupDataValid = false;
|
||||||
|
|
||||||
public BExpressionContext( String context, BExpressionMetaData meta )
|
protected BExpressionContext( String context, BExpressionMetaData meta )
|
||||||
{
|
{
|
||||||
this( context, 4096, meta );
|
this( context, 4096, meta );
|
||||||
}
|
}
|
||||||
|
@ -100,7 +90,7 @@ public final class BExpressionContext
|
||||||
* @param context global, way or node - context of that instance
|
* @param context global, way or node - context of that instance
|
||||||
* @param hashSize size of hashmap for result caching
|
* @param hashSize size of hashmap for result caching
|
||||||
*/
|
*/
|
||||||
public BExpressionContext( String context, int hashSize, BExpressionMetaData meta )
|
protected BExpressionContext( String context, int hashSize, BExpressionMetaData meta )
|
||||||
{
|
{
|
||||||
this.context = context;
|
this.context = context;
|
||||||
this.meta = meta;
|
this.meta = meta;
|
||||||
|
@ -113,12 +103,13 @@ public final class BExpressionContext
|
||||||
_arrayInverse = new boolean[hashSize];
|
_arrayInverse = new boolean[hashSize];
|
||||||
_arrayCrc = new int[hashSize];
|
_arrayCrc = new int[hashSize];
|
||||||
|
|
||||||
_arrayCostfactor = new float[hashSize];
|
// create the build-in variables cache
|
||||||
_arrayTurncost = new float[hashSize];
|
int nBuildInVars = getBuildInVariableNames().length;
|
||||||
_arrayUphillCostfactor = new float[hashSize];
|
arrayBuildInVariablesCache = new float[nBuildInVars][];
|
||||||
_arrayDownhillCostfactor = new float[hashSize];
|
for( int vi=0; vi<nBuildInVars; vi++ )
|
||||||
_arrayInitialcost = new float[hashSize];
|
{
|
||||||
_arrayNodeAccessGranted = new float[hashSize];
|
arrayBuildInVariablesCache[vi] = new float[hashSize];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -406,12 +397,10 @@ public final class BExpressionContext
|
||||||
decode( lookupData, currentInverseDirection, currentByteArray );
|
decode( lookupData, currentInverseDirection, currentByteArray );
|
||||||
evaluate( lookupData );
|
evaluate( lookupData );
|
||||||
|
|
||||||
_arrayCostfactor[currentHashBucket] = variableData[costfactorIdx];
|
for( int vi=0; vi<buildInVariableIdx.length; vi++ )
|
||||||
_arrayTurncost[currentHashBucket] = variableData[turncostIdx];
|
{
|
||||||
_arrayUphillCostfactor[currentHashBucket] = variableData[uphillcostfactorIdx];
|
arrayBuildInVariablesCache[vi][currentHashBucket] = variableData[buildInVariableIdx[vi]];
|
||||||
_arrayDownhillCostfactor[currentHashBucket] = variableData[downhillcostfactorIdx];
|
}
|
||||||
_arrayInitialcost[currentHashBucket] = variableData[initialcostIdx];
|
|
||||||
_arrayNodeAccessGranted[currentHashBucket] = variableData[nodeaccessgrantedIdx];
|
|
||||||
|
|
||||||
_receiver = null;
|
_receiver = null;
|
||||||
return false;
|
return false;
|
||||||
|
@ -669,13 +658,13 @@ public final class BExpressionContext
|
||||||
linenr = 1;
|
linenr = 1;
|
||||||
minWriteIdx = variableData == null ? 0 : variableData.length;
|
minWriteIdx = variableData == null ? 0 : variableData.length;
|
||||||
|
|
||||||
costfactorIdx = getVariableIdx( "costfactor", true );
|
// create the build-in variables
|
||||||
turncostIdx = getVariableIdx( "turncost", true );
|
String[] varNames = getBuildInVariableNames();
|
||||||
uphillcostfactorIdx = getVariableIdx( "uphillcostfactor", true );
|
buildInVariableIdx = new int[varNames.length];
|
||||||
downhillcostfactorIdx = getVariableIdx( "downhillcostfactor", true );
|
for( int vi=0; vi<varNames.length; vi++ )
|
||||||
initialcostIdx = getVariableIdx( "initialcost", true );
|
{
|
||||||
nodeaccessgrantedIdx = getVariableIdx( "nodeaccessgranted", true );
|
buildInVariableIdx[vi] = getVariableIdx( varNames[vi], true );
|
||||||
|
}
|
||||||
|
|
||||||
expressionList = _parseFile( file );
|
expressionList = _parseFile( file );
|
||||||
float[] readOnlyData = variableData;
|
float[] readOnlyData = variableData;
|
||||||
|
|
|
@ -0,0 +1,35 @@
|
||||||
|
// context for simple expression
|
||||||
|
// context means:
|
||||||
|
// - the local variables
|
||||||
|
// - the local variable names
|
||||||
|
// - the lookup-input variables
|
||||||
|
|
||||||
|
package btools.expressions;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public final class BExpressionContextGlobal extends BExpressionContext
|
||||||
|
{
|
||||||
|
private static String[] buildInVariables =
|
||||||
|
{};
|
||||||
|
|
||||||
|
protected String[] getBuildInVariableNames()
|
||||||
|
{
|
||||||
|
return buildInVariables;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BExpressionContextGlobal( BExpressionMetaData meta )
|
||||||
|
{
|
||||||
|
super( "global", meta );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an Expression-Context for way context
|
||||||
|
*
|
||||||
|
* @param hashSize size of hashmap for result caching
|
||||||
|
*/
|
||||||
|
public BExpressionContextGlobal( int hashSize, BExpressionMetaData meta )
|
||||||
|
{
|
||||||
|
super( "global", hashSize, meta );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
// context for simple expression
|
||||||
|
// context means:
|
||||||
|
// - the local variables
|
||||||
|
// - the local variable names
|
||||||
|
// - the lookup-input variables
|
||||||
|
|
||||||
|
package btools.expressions;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public final class BExpressionContextNode extends BExpressionContext
|
||||||
|
{
|
||||||
|
private static String[] buildInVariables =
|
||||||
|
{ "initialcost" };
|
||||||
|
|
||||||
|
protected String[] getBuildInVariableNames()
|
||||||
|
{
|
||||||
|
return buildInVariables;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getInitialcost() { return getBuildInVariable(0); }
|
||||||
|
|
||||||
|
|
||||||
|
public BExpressionContextNode( BExpressionMetaData meta )
|
||||||
|
{
|
||||||
|
super( "node", meta );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an Expression-Context for way context
|
||||||
|
*
|
||||||
|
* @param hashSize size of hashmap for result caching
|
||||||
|
*/
|
||||||
|
public BExpressionContextNode( int hashSize, BExpressionMetaData meta )
|
||||||
|
{
|
||||||
|
super( "node", hashSize, meta );
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
// context for simple expression
|
||||||
|
// context means:
|
||||||
|
// - the local variables
|
||||||
|
// - the local variable names
|
||||||
|
// - the lookup-input variables
|
||||||
|
|
||||||
|
package btools.expressions;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public final class BExpressionContextWay extends BExpressionContext
|
||||||
|
{
|
||||||
|
private static String[] buildInVariables =
|
||||||
|
{ "costfactor", "turncost", "uphillcostfactor", "downhillcostfactor", "initialcost", "nodeaccessgranted" };
|
||||||
|
|
||||||
|
protected String[] getBuildInVariableNames()
|
||||||
|
{
|
||||||
|
return buildInVariables;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getCostfactor() { return getBuildInVariable(0); }
|
||||||
|
public float getTurncost() { return getBuildInVariable(1); }
|
||||||
|
public float getUphillCostfactor() { return getBuildInVariable(2); }
|
||||||
|
public float getDownhillCostfactor() { return getBuildInVariable(3); }
|
||||||
|
public float getInitialcost() { return getBuildInVariable(4); }
|
||||||
|
public float getNodeAccessGranted() { return getBuildInVariable(5); }
|
||||||
|
|
||||||
|
|
||||||
|
public BExpressionContextWay( BExpressionMetaData meta )
|
||||||
|
{
|
||||||
|
super( "way", meta );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create an Expression-Context for way context
|
||||||
|
*
|
||||||
|
* @param hashSize size of hashmap for result caching
|
||||||
|
*/
|
||||||
|
public BExpressionContextWay( int hashSize, BExpressionMetaData meta )
|
||||||
|
{
|
||||||
|
super( "way", hashSize, meta );
|
||||||
|
}
|
||||||
|
}
|
|
@ -29,18 +29,18 @@ public final class ProfileComparator
|
||||||
File profile1File = new File( args[1] );
|
File profile1File = new File( args[1] );
|
||||||
File profile2File = new File( args[2] );
|
File profile2File = new File( args[2] );
|
||||||
int nsamples = Integer.parseInt( args[3] );
|
int nsamples = Integer.parseInt( args[3] );
|
||||||
testContext( lookupFile, profile1File, profile2File, nsamples, "way" );
|
testContext( lookupFile, profile1File, profile2File, nsamples, false );
|
||||||
testContext( lookupFile, profile1File, profile2File, nsamples, "node" );
|
testContext( lookupFile, profile1File, profile2File, nsamples, true );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void testContext( File lookupFile, File profile1File, File profile2File, int nsamples, String contextName )
|
private static void testContext( File lookupFile, File profile1File, File profile2File, int nsamples, boolean nodeContext )
|
||||||
{
|
{
|
||||||
// read lookup.dat + profiles
|
// read lookup.dat + profiles
|
||||||
BExpressionMetaData meta1 = new BExpressionMetaData();
|
BExpressionMetaData meta1 = new BExpressionMetaData();
|
||||||
BExpressionMetaData meta2 = new BExpressionMetaData();
|
BExpressionMetaData meta2 = new BExpressionMetaData();
|
||||||
BExpressionContext expctx1 = new BExpressionContext(contextName, 4096, meta1 );
|
BExpressionContext expctx1 = nodeContext ? new BExpressionContextNode( meta1 ) : new BExpressionContextWay( meta1 );
|
||||||
BExpressionContext expctx2 = new BExpressionContext(contextName, 4096, meta2 );
|
BExpressionContext expctx2 = nodeContext ? new BExpressionContextNode( meta2 ) : new BExpressionContextWay( meta2 );
|
||||||
meta1.readMetaData( lookupFile );
|
meta1.readMetaData( lookupFile );
|
||||||
meta2.readMetaData( lookupFile );
|
meta2.readMetaData( lookupFile );
|
||||||
expctx1.parseFile( profile1File, "global" );
|
expctx1.parseFile( profile1File, "global" );
|
||||||
|
|
|
@ -19,7 +19,7 @@ public class EncodeDecodeTest
|
||||||
|
|
||||||
// read lookup.dat + trekking.brf
|
// read lookup.dat + trekking.brf
|
||||||
BExpressionMetaData meta = new BExpressionMetaData();
|
BExpressionMetaData meta = new BExpressionMetaData();
|
||||||
BExpressionContext expctxWay = new BExpressionContext("way", 4096, meta );
|
BExpressionContextWay expctxWay = new BExpressionContextWay( meta );
|
||||||
meta.readMetaData( lookupFile );
|
meta.readMetaData( lookupFile );
|
||||||
expctxWay.parseFile( new File( profileDir, "trekking.brf" ), "global" );
|
expctxWay.parseFile( new File( profileDir, "trekking.brf" ), "global" );
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,8 @@ import java.io.File;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
|
|
||||||
import btools.expressions.BExpressionContext;
|
import btools.expressions.BExpressionContext;
|
||||||
|
import btools.expressions.BExpressionContextNode;
|
||||||
|
import btools.expressions.BExpressionContextWay;
|
||||||
import btools.expressions.BExpressionMetaData;
|
import btools.expressions.BExpressionMetaData;
|
||||||
|
|
||||||
public class OsmCutter extends MapCreatorBase
|
public class OsmCutter extends MapCreatorBase
|
||||||
|
@ -46,11 +48,11 @@ public class OsmCutter extends MapCreatorBase
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
private BExpressionContext _expctxWay;
|
private BExpressionContextWay _expctxWay;
|
||||||
private BExpressionContext _expctxNode;
|
private BExpressionContextNode _expctxNode;
|
||||||
|
|
||||||
private BExpressionContext _expctxWayStat;
|
private BExpressionContextWay _expctxWayStat;
|
||||||
private BExpressionContext _expctxNodeStat;
|
private BExpressionContextNode _expctxNodeStat;
|
||||||
|
|
||||||
public void process (File lookupFile, File outTileDir, File wayFile, File relFile, File profileFile, File mapFile ) throws Exception
|
public void process (File lookupFile, File outTileDir, File wayFile, File relFile, File profileFile, File mapFile ) throws Exception
|
||||||
{
|
{
|
||||||
|
@ -61,14 +63,14 @@ public class OsmCutter extends MapCreatorBase
|
||||||
|
|
||||||
BExpressionMetaData meta = new BExpressionMetaData();
|
BExpressionMetaData meta = new BExpressionMetaData();
|
||||||
|
|
||||||
_expctxWay = new BExpressionContext("way", meta );
|
_expctxWay = new BExpressionContextWay( meta );
|
||||||
_expctxNode = new BExpressionContext("node", meta );
|
_expctxNode = new BExpressionContextNode( meta );
|
||||||
meta.readMetaData( lookupFile );
|
meta.readMetaData( lookupFile );
|
||||||
_expctxWay.parseFile( profileFile, "global" );
|
_expctxWay.parseFile( profileFile, "global" );
|
||||||
|
|
||||||
|
|
||||||
_expctxWayStat = new BExpressionContext("way", null );
|
_expctxWayStat = new BExpressionContextWay( null );
|
||||||
_expctxNodeStat = new BExpressionContext("node", null );
|
_expctxNodeStat = new BExpressionContextNode( null );
|
||||||
|
|
||||||
this.outTileDir = outTileDir;
|
this.outTileDir = outTileDir;
|
||||||
if ( !outTileDir.isDirectory() ) throw new RuntimeException( "out tile directory " + outTileDir + " does not exist" );
|
if ( !outTileDir.isDirectory() ) throw new RuntimeException( "out tile directory " + outTileDir + " does not exist" );
|
||||||
|
|
|
@ -6,7 +6,7 @@ import java.io.EOFException;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
||||||
import btools.expressions.BExpressionContext;
|
import btools.expressions.BExpressionContextWay;
|
||||||
import btools.expressions.BExpressionMetaData;
|
import btools.expressions.BExpressionMetaData;
|
||||||
import btools.util.CompactLongSet;
|
import btools.util.CompactLongSet;
|
||||||
import btools.util.FrozenLongSet;
|
import btools.util.FrozenLongSet;
|
||||||
|
@ -22,8 +22,8 @@ public class RelationMerger extends MapCreatorBase
|
||||||
{
|
{
|
||||||
private HashMap<String,CompactLongSet> routesets;
|
private HashMap<String,CompactLongSet> routesets;
|
||||||
private CompactLongSet routesetall;
|
private CompactLongSet routesetall;
|
||||||
private BExpressionContext expctxReport;
|
private BExpressionContextWay expctxReport;
|
||||||
private BExpressionContext expctxCheck;
|
private BExpressionContextWay expctxCheck;
|
||||||
// private BExpressionContext expctxStat;
|
// private BExpressionContext expctxStat;
|
||||||
|
|
||||||
private DataOutputStream wayOutStream;
|
private DataOutputStream wayOutStream;
|
||||||
|
@ -44,11 +44,11 @@ public class RelationMerger extends MapCreatorBase
|
||||||
{
|
{
|
||||||
// read lookup + profile for relation access-check
|
// read lookup + profile for relation access-check
|
||||||
BExpressionMetaData metaReport = new BExpressionMetaData();
|
BExpressionMetaData metaReport = new BExpressionMetaData();
|
||||||
expctxReport = new BExpressionContext("way", metaReport );
|
expctxReport = new BExpressionContextWay( metaReport );
|
||||||
metaReport.readMetaData( lookupFile );
|
metaReport.readMetaData( lookupFile );
|
||||||
|
|
||||||
BExpressionMetaData metaCheck = new BExpressionMetaData();
|
BExpressionMetaData metaCheck = new BExpressionMetaData();
|
||||||
expctxCheck = new BExpressionContext("way", metaCheck );
|
expctxCheck = new BExpressionContextWay( metaCheck );
|
||||||
metaCheck.readMetaData( lookupFile );
|
metaCheck.readMetaData( lookupFile );
|
||||||
|
|
||||||
expctxReport.parseFile( reportProfile, "global" );
|
expctxReport.parseFile( reportProfile, "global" );
|
||||||
|
|
|
@ -7,7 +7,8 @@ import java.io.RandomAccessFile;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import btools.expressions.BExpressionContext;
|
import btools.expressions.BExpressionContextNode;
|
||||||
|
import btools.expressions.BExpressionContextWay;
|
||||||
import btools.expressions.BExpressionMetaData;
|
import btools.expressions.BExpressionMetaData;
|
||||||
import btools.util.ByteArrayUnifier;
|
import btools.util.ByteArrayUnifier;
|
||||||
import btools.util.ByteDataWriter;
|
import btools.util.ByteDataWriter;
|
||||||
|
@ -46,8 +47,8 @@ public class WayLinker extends MapCreatorBase
|
||||||
|
|
||||||
private long creationTimeStamp;
|
private long creationTimeStamp;
|
||||||
|
|
||||||
private BExpressionContext expctxWay;
|
private BExpressionContextWay expctxWay;
|
||||||
private BExpressionContext expctxNode;
|
private BExpressionContextNode expctxNode;
|
||||||
|
|
||||||
private ByteArrayUnifier abUnifier;
|
private ByteArrayUnifier abUnifier;
|
||||||
|
|
||||||
|
@ -83,8 +84,8 @@ public class WayLinker extends MapCreatorBase
|
||||||
BExpressionMetaData meta = new BExpressionMetaData();
|
BExpressionMetaData meta = new BExpressionMetaData();
|
||||||
|
|
||||||
// read lookup + profile for lookup-version + access-filter
|
// read lookup + profile for lookup-version + access-filter
|
||||||
expctxWay = new BExpressionContext("way", meta);
|
expctxWay = new BExpressionContextWay( meta);
|
||||||
expctxNode = new BExpressionContext("node", meta);
|
expctxNode = new BExpressionContextNode( meta);
|
||||||
meta.readMetaData( lookupFile );
|
meta.readMetaData( lookupFile );
|
||||||
|
|
||||||
lookupVersion = meta.lookupVersion;
|
lookupVersion = meta.lookupVersion;
|
||||||
|
|
|
@ -0,0 +1,98 @@
|
||||||
|
package btools.memrouter;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import btools.expressions.BExpressionContext;
|
||||||
|
import btools.router.OsmNodeNamed;
|
||||||
|
import btools.router.OsmTrack;
|
||||||
|
import btools.router.RoutingContext;
|
||||||
|
import btools.router.RoutingEngine;
|
||||||
|
|
||||||
|
public class TwinRoutingEngine extends RoutingEngine
|
||||||
|
{
|
||||||
|
private static Object graphSync = new Object();
|
||||||
|
private static GraphLoader graph;
|
||||||
|
|
||||||
|
public TwinRoutingEngine( String outfileBase, String logfileBase, String segmentDir,
|
||||||
|
List<OsmNodeNamed> waypoints, RoutingContext rc )
|
||||||
|
{
|
||||||
|
super( outfileBase, logfileBase, segmentDir, waypoints, rc );
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doRun( long maxRunningTime )
|
||||||
|
{
|
||||||
|
if ( routingContext.localFunction != null && routingContext.localFunction.startsWith( "../im/") )
|
||||||
|
{
|
||||||
|
doMemoryRun( maxRunningTime );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
super.doRun( maxRunningTime );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static private Map<String,BExpressionContext[]> expressionCache = new HashMap<String,BExpressionContext[]>();
|
||||||
|
|
||||||
|
private void doMemoryRun( long maxRunningTime )
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
synchronized( graphSync )
|
||||||
|
{
|
||||||
|
if ( graph == null )
|
||||||
|
{
|
||||||
|
loadGraph();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* // reuse old expression-caches
|
||||||
|
BExpressionContext[] exp = expressionCache.get( routingContext.localFunction );
|
||||||
|
if ( exp == null )
|
||||||
|
{
|
||||||
|
exp = new BExpressionContext[2];
|
||||||
|
exp[0] = routingContext.expctxWay;
|
||||||
|
exp[1] = routingContext.expctxNode;
|
||||||
|
expressionCache.put( routingContext.localFunction, exp );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
System.out.println( "re-using exp-ctx for : " + routingContext.localFunction );
|
||||||
|
routingContext.expctxWay = exp[0];
|
||||||
|
routingContext.expctxNode = exp[1];
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
OsmLinkP.currentserial++;
|
||||||
|
ScheduledRouter router = new ScheduledRouter( graph, routingContext, this );
|
||||||
|
foundTrack = router.findRoute( waypoints.get(0), waypoints.get(1), "17.12.2014-19:00", routingContext.getAlternativeIdx() );
|
||||||
|
System.out.println( "linksProcessed=" + router.linksProcessed + " linksReProcessed=" + router.linksReProcessed);
|
||||||
|
System.out.println( "skippedChained=" + router.skippedChained + " closedSkippedChained=" + router.closedSkippedChained);
|
||||||
|
|
||||||
|
System.out.println( "expCtxWay: requests: " + routingContext.expctxWay.requests + " requests2: " + routingContext.expctxWay.requests2 + " cache-misses: " + routingContext.expctxWay.cachemisses );
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( Exception e )
|
||||||
|
{
|
||||||
|
e.printStackTrace();
|
||||||
|
errorMessage = e.getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void loadGraph() throws Exception
|
||||||
|
{
|
||||||
|
File parentDir = new File( segmentDir ).getParentFile();
|
||||||
|
File nodeTilesIn = new File( parentDir, "unodes55");
|
||||||
|
File wayTilesIn = new File( parentDir, "waytiles55");
|
||||||
|
File[] fahrplanFiles = new File[2];
|
||||||
|
fahrplanFiles[0] = new File( parentDir, "fahrplan_nahverkehr.txt" );
|
||||||
|
fahrplanFiles[1] = new File( parentDir, "fahrplan.txt" );
|
||||||
|
|
||||||
|
graph = new GraphLoader();
|
||||||
|
graph.process( nodeTilesIn, wayTilesIn, fahrplanFiles, routingContext.expctxWay );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
|
@ -11,7 +11,6 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
@ -30,7 +29,7 @@ import android.os.Environment;
|
||||||
import android.util.DisplayMetrics;
|
import android.util.DisplayMetrics;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import btools.expressions.BExpressionContext;
|
import btools.expressions.BExpressionContextGlobal;
|
||||||
import btools.expressions.BExpressionMetaData;
|
import btools.expressions.BExpressionMetaData;
|
||||||
import btools.mapaccess.OsmNode;
|
import btools.mapaccess.OsmNode;
|
||||||
import btools.router.OsmNodeNamed;
|
import btools.router.OsmNodeNamed;
|
||||||
|
@ -683,7 +682,7 @@ private long startTime = 0L;
|
||||||
|
|
||||||
// parse global section of profile for mode preselection
|
// parse global section of profile for mode preselection
|
||||||
BExpressionMetaData meta = new BExpressionMetaData();
|
BExpressionMetaData meta = new BExpressionMetaData();
|
||||||
BExpressionContext expctxGlobal = new BExpressionContext( "global", meta );
|
BExpressionContextGlobal expctxGlobal = new BExpressionContextGlobal( meta );
|
||||||
meta.readMetaData( new File( profileDir, "lookups.dat" ) );
|
meta.readMetaData( new File( profileDir, "lookups.dat" ) );
|
||||||
expctxGlobal.parseFile( new File( profilePath ), null );
|
expctxGlobal.parseFile( new File( profilePath ), null );
|
||||||
expctxGlobal.evaluate( new int[0] );
|
expctxGlobal.evaluate( new int[0] );
|
||||||
|
|
Loading…
Reference in a new issue